[xorg-x11-server] Block signals when removing all input devices #737031

Peter Hutterer whot at fedoraproject.org
Mon Oct 24 02:49:49 UTC 2011


commit 70574d9ce14c3c7049739372122dab06d7e5588b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Oct 24 12:49:39 2011 +1000

    Block signals when removing all input devices #737031

 ...ix-block-signals-when-closing-all-devices.patch |   46 ++++++++++++++++++++
 xorg-x11-server.spec                               |    8 +++-
 2 files changed, 53 insertions(+), 1 deletions(-)
---
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 <peter.hutterer at who-t.net>
+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 <peter.hutterer at who-t.net>
+---
+ 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 <peter.hutterer at redhat.com> 1.11.1-2
+- Block signals when removing all input devices #737031
+
 * Thu Oct 13 2011 Adam Jackson <ajax at redhat.com>
 - Drop some Requires >= on things where we had newer versions in F14.
 


More information about the scm-commits mailing list