use after free in _XReply in libX11 1.3.4

Pauli Nieminen suokkos at gmail.com
Thu Jul 15 23:38:46 PDT 2010


CC: xcb list

On Thu, Jul 15, 2010 at 11:23 PM, Matthieu Herrb <matthieu.herrb at laas.fr> wrote:
> Hi,
>
> After updating to libX11 1.3.4, I started seeing window managers or
> toolbar programs exit without reasons when closing windows or pop-ups.
>
> After a bit of debugging, I figured out that this is caused by
> a use after free bug in _XReply. Most people running Linux won't see it
> because the data in the just free()'d memory is still there. But
> Using OpenBSD's malloc which fills free()'d memory with a specific
> pattern, you get a different code path.
>
> The proplem arises in xcb_io.c:582. the 'current' pointer can have
> been free()'d already (by dequeue_pending_request() called at line 562)
> when getting there.
>
> A simple test program to reproduce the issue is appended below: just
> call XGetWindowProperty on a non-existent window.
>
> Using his favourite malloc debugger one should be able to see the problem
> on Linux too...
>
> Unfortunatly I'm not sure of what the fix is...
>
> #include <X11/Xlib.h>
> #include <X11/Xatom.h>
> #include <stdio.h>
>
> int
> main(int argc, char *argv[])
> {
>        Display *dpy;
>        Window w = 0;
>        Atom prop;
>        Atom type;
>        int format, result;
>        unsigned long nitems, bytes;
>        unsigned char *prop_value;
>
>        dpy = XOpenDisplay(NULL);
>        prop = XInternAtom (dpy, "_NET_WM_STATE", False);
>        result = XGetWindowProperty(dpy, w, prop, 0, 0x7fffffff, False,
>            XA_ATOM, &type, &format, &nitems, &bytes, &prop_value);
>        return result;
> }
>
> --
> Matthieu Herrb
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>


More information about the xorg-devel mailing list