From 70574d9ce14c3c7049739372122dab06d7e5588b Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Oct 24 2011 02:49:39 +0000 Subject: Block signals when removing all input devices #737031 --- diff --git a/0001-dix-block-signals-when-closing-all-devices.patch b/0001-dix-block-signals-when-closing-all-devices.patch new file mode 100644 index 0000000..b7bdbfb --- /dev/null +++ b/0001-dix-block-signals-when-closing-all-devices.patch @@ -0,0 +1,46 @@ +From 01e37883438b0bedf511f0b56d31943ad2a192f5 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Mon, 24 Oct 2011 12:00:32 +1000 +Subject: [PATCH] dix: block signals when closing all devices + +When closing down all devices, we manually unset master for all attached +devices, but the device's sprite info still points to the master's sprite +info. This leaves us a window where the master is freed already but the +device isn't yet. A signal during that window causes dereference of the +already freed spriteInfo in mieqEnqueue's EnqueueScreen macro. + +Simply block signals when removing all devices. It's not like we're really +worrying about high-responsive input at this stage. + +https://bugzilla.redhat.com/show_bug.cgi?id=737031 + +Signed-off-by: Peter Hutterer +--- + dix/devices.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/dix/devices.c b/dix/devices.c +index 63454fe..4a525d5 100644 +--- a/dix/devices.c ++++ b/dix/devices.c +@@ -971,6 +971,8 @@ CloseDownDevices(void) + { + DeviceIntPtr dev; + ++ OsBlockSignals(); ++ + /* Float all SDs before closing them. Note that at this point resources + * (e.g. cursors) have been freed already, so we can't just call + * AttachDevice(NULL, dev, NULL). Instead, we have to forcibly set master +@@ -993,6 +995,8 @@ CloseDownDevices(void) + inputInfo.keyboard = NULL; + inputInfo.pointer = NULL; + XkbDeleteRulesDflts(); ++ ++ OsReleaseSignals(); + } + + /** +-- +1.7.7 + diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index dca0f06..c2e21a6 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -30,7 +30,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.11.1 -Release: 1%{?gitdate:.%{gitdate}}%{dist} +Release: 2%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -87,6 +87,9 @@ Patch7007: xserver-1.10.99.1-test.patch # Submitted to upstream but not merged for 1.11 Patch7009: xserver-1.10.99-config-add-udev-systemd-multi-seat-support.patch +# Bug 737031 - [Crestline] Coredump when doing exit +Patch7010: 0001-dix-block-signals-when-closing-all-devices.patch + %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri @@ -549,6 +552,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Mon Oct 24 2011 Peter Hutterer 1.11.1-2 +- Block signals when removing all input devices #737031 + * Thu Oct 13 2011 Adam Jackson - Drop some Requires >= on things where we had newer versions in F14.