Find a file
Steven McDonald 2abbf56493 Xi: block SIGIOs while copying device classes around
I've been seeing sporadic (anywhere from once every few days to 3-4
times a day) crashes and freezes in X. The problematic behaviour isn't
always the same, but I chose a particular incident to debug, and found
that X was segfaulting in updateMotionHistory, on line 575 of
dix/getevents.c.

After some further investigation, I found that the bug was being
triggered when a SIGIO was received in DeepCopyPointerClasses, between
the AllocValuatorClass call (line 540) and updating the to->valuator
pointer (line 545). AllocValuatorClass calls realloc() on to->valuator,
so between these lines, it's not guaranteed to point to allocated
memory.

It seems the SIGIO handler is calling updateMotionHistory, which is
reading the memory pointed to by to->valuator and getting a wrong value
for last_motion, which updates buff to point to wildly the wrong place
and thus generates a segfault when a memcpy() is done into buff.

I am attaching a patch which I've been running on that machine for the
past three days, and haven't yet observed any more crashing or freezing
behaviour. The patch simply calls OsBlockSIGIO while
DeepCopyDeviceClasses is in progress, as the state of the X server's
device data structures is not guaranteed to be in a consistent state
during that time.

Debian bug#744303 <https://bugs.debian.org/744303>

Signed-off-by: Julien Cristau <jcristau@debian.org>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit d7a2df0a74)
2014-06-27 09:47:59 +10:00
composite composite: Fix COW creation for Xinerama (v2) 2013-12-09 13:20:36 -05:00
config config: search for PnPID on all parents (#75513) 2014-03-13 08:29:46 +10:00
damageext damageext: Die if we can't create the Xinerama resource type 2013-12-09 13:20:37 -05:00
dbe dbe: Fold the window private private into the window private 2013-09-10 13:28:24 -04:00
dix dix: prevent a driver from initializing or submitting buttons > MAX_BUTTONS 2014-02-19 10:25:00 +10:00
doc doc: Update documentation about Windows platforms support a bit 2012-10-29 12:21:14 +00:00
dri3 dri3: Don't use the major/minor version from the protocol headers 2013-12-13 14:59:03 -05:00
exa Stop including inline assembly .il file for Solaris Studio builds 2013-11-14 13:12:21 +09:00
fb fb: Fix origin of source picture in fbGlyphs 2014-05-31 17:50:34 -07:00
glx glx: Clear new FBConfig attributes to 0 by default. 2014-04-12 09:29:50 -06:00
hw xfree86: fix wrong DontZap documentation (#71113) 2014-06-27 09:47:41 +10:00
include Fix overflow checking extension versions 2014-06-27 09:47:52 +10:00
m4 XORG_TLS: Pick the first option that works (ie: prefer __thread) 2013-02-14 09:20:47 -08:00
man man: drop specific mention of DontZap in -retro (#71113) 2014-06-27 09:47:43 +10:00
mi mieq: Bump default queue size to 512 2013-11-14 16:35:32 +09:00
miext miext/sync: Handle libxshmfence API change 2013-12-02 12:57:11 -08:00
os os: restrict display names to digits 2014-02-19 10:22:54 +10:00
present present: Set complete notify mode to Skip as needed 2013-12-20 12:28:00 -08:00
pseudoramiX Move pseudoramiX code where it can be shared between Xwin and Xquartz 2013-08-30 12:52:30 +01:00
randr randr: deliver Output and Crtc events of attached output providers. 2013-10-30 08:09:31 -07:00
record Avoid conflicts with Solaris <sys/regset.h> defines that clash with our names 2013-11-12 21:03:53 +09:00
render Abstract cursor refcounting 2013-05-15 19:17:57 +10:00
test Xi: fix modifier offset in XIPassiveGrab swapping function 2014-02-19 10:24:08 +10:00
Xext sync: Avoid ridiculously long timeouts 2014-03-13 08:29:46 +10:00
xfixes fixes: Fix PanoramiXSetWindowShapeRegion for root windows (v2) 2013-12-09 13:20:37 -05:00
Xi Xi: block SIGIOs while copying device classes around 2014-06-27 09:47:59 +10:00
xkb xkb: don't call atoi(NULL) when parsing argv 2013-07-02 15:12:29 +10:00
.dir-locals.el Add .dir-locals.el 2013-08-17 12:17:36 +02:00
.gitignore doc: relocate xserver.ent in the package root directory 2011-05-14 11:22:26 -07:00
autogen.sh autogen.sh: Honor NOCONFIGURE=1 2012-10-19 13:12:33 +10:00
configure.ac Bump version # to 1.15.1.901 2014-06-22 22:11:48 -06:00
COPYING Shadow: Switch the Amiga/Atari bitplane code to the canonical X.Org license 2013-05-14 14:41:00 -07:00
devbook.am devbook.am: maintenance update from docbook.am 2011-09-21 14:07:52 -07:00
docbook.am docbook.am: embed css styles inside the HTML HEAD element 2011-09-21 14:07:49 -07:00
fix-miregion Change region implementation names to eliminate the 'mi' prefix 2010-06-05 17:47:32 -07:00
fix-miregion-private Change region implementation names to eliminate the 'mi' prefix 2010-06-05 17:47:32 -07:00
fix-patch-whitespace Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
fix-region Rename region macros to eliminate screen argument 2010-06-05 18:59:00 -07:00
Makefile.am Add dri3 and present directorys to distribution 2013-11-01 01:45:22 -07:00
manpages.am Xdmx.man: Show actual configured XKB defaults instead of old hardcoded values 2011-06-21 17:54:14 -07:00
README packaging: provide a default README file #24206 2010-01-27 14:00:17 -08:00
xorg-server.m4 macros: clarify documentation 2012-11-05 13:24:57 -06:00
xorg-server.pc.in xfree86: link modules against Xorg symbols on Cygwin 2012-04-05 21:57:07 -05:00
xserver.ent.in doc: relocate xserver.ent in the package root directory 2011-05-14 11:22:26 -07:00

					X Server

The X server accepts requests from client applications to create windows,
which are (normally rectangular) "virtual screens" that the client program
can draw into.

Windows are then composed on the actual screen by the X server
(or by a separate composite manager) as directed by the window manager,
which usually communicates with the user via graphical controls such as buttons
and draggable titlebars and borders.

For a comprehensive overview of X Server and X Window System, consult the
following article:
http://en.wikipedia.org/wiki/X_server

All questions regarding this software should be directed at the
Xorg mailing list:

        http://lists.freedesktop.org/mailman/listinfo/xorg

Please submit bug reports to the Xorg bugzilla:

        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg

The master development code repository can be found at:

        git://anongit.freedesktop.org/git/xorg/xserver

        http://cgit.freedesktop.org/xorg/xserver

For patch submission instructions, see:

	http://www.x.org/wiki/Development/Documentation/SubmittingPatches

For more information on the git code manager, see:

        http://wiki.x.org/wiki/GitPage