Fix server crash when a XI 1.x device grab is activated on a disabled
synaptics touchpad is disabled
This commit is contained in:
parent
db986136c7
commit
45aae11391
@ -0,0 +1,60 @@
|
||||
From 9d6b8365702e4648e793fea21ad22f7174558680 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Date: Fri, 28 Sep 2012 11:49:29 +1000
|
||||
Subject: [PATCH] dix: fix crash on XI 1.x grabs on disabled devices.
|
||||
(#54934)
|
||||
|
||||
If the device is disabled, the sprite window is NULL and dereferencing
|
||||
crashes the server.
|
||||
|
||||
This is only triggered for XI 1.x grabs (ProcXGrabDevice) as XI2 grabs would
|
||||
trigger another code path, creating a sprite for the disabled device as if
|
||||
detaching it (which is wrong and fixed with this patch too).
|
||||
|
||||
Grabbing a disabled device doesn't make sense as it won't send events
|
||||
anyway. However, the protocol specs do not prohibit it, so we need to keep
|
||||
it working.
|
||||
Luckily, oldWin is only used for focus out events, which aren't necessary
|
||||
given that the device is disabled.
|
||||
|
||||
X.Org Bug 54934 <http://bugs.freedesktop.org/show_bug.cgi?id=54934>
|
||||
|
||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
Reviewed-by: Chase Douglas <chase.douglas@ubuntu.com>
|
||||
---
|
||||
dix/events.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dix/events.c b/dix/events.c
|
||||
index 3b40446..c0e330b 100644
|
||||
--- a/dix/events.c
|
||||
+++ b/dix/events.c
|
||||
@@ -1555,11 +1555,13 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time,
|
||||
WindowPtr oldWin;
|
||||
|
||||
/* slave devices need to float for the duration of the grab. */
|
||||
- if (grab->grabtype == XI2 &&
|
||||
+ if (grab->grabtype == XI2 && keybd->enabled &&
|
||||
!(passive & ImplicitGrabMask) && !IsMaster(keybd))
|
||||
DetachFromMaster(keybd);
|
||||
|
||||
- if (grabinfo->grab)
|
||||
+ if (!keybd->enabled)
|
||||
+ oldWin = NULL;
|
||||
+ else if (grabinfo->grab)
|
||||
oldWin = grabinfo->grab->window;
|
||||
else if (keybd->focus)
|
||||
oldWin = keybd->focus->win;
|
||||
@@ -1569,7 +1571,8 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time,
|
||||
oldWin = keybd->focus->win;
|
||||
if (keybd->valuator)
|
||||
keybd->valuator->motionHintWindow = NullWindow;
|
||||
- DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab);
|
||||
+ if (oldWin)
|
||||
+ DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab);
|
||||
if (syncEvents.playingEvents)
|
||||
grabinfo->grabTime = syncEvents.time;
|
||||
else
|
||||
--
|
||||
1.7.11.7
|
||||
|
@ -43,7 +43,7 @@
|
||||
Summary: X.Org X11 X server
|
||||
Name: xorg-x11-server
|
||||
Version: 1.13.0
|
||||
Release: 8%{?gitdate:.%{gitdate}}%{dist}
|
||||
Release: 9%{?gitdate:.%{gitdate}}%{dist}
|
||||
URL: http://www.x.org
|
||||
License: MIT
|
||||
Group: User Interface/X
|
||||
@ -131,6 +131,9 @@ Patch7060: 0001-xf86-Fix-build-against-recent-Linux-kernel.patch
|
||||
# Fix non-PCI configuration-less setups
|
||||
Patch7061: v2-xf86-Fix-non-PCI-configuration-less-setups.patch
|
||||
|
||||
# fdo Bug 54934 - Crash on XGrabDevice() of deactivated synaptics device -
|
||||
Patch7062: 0001-dix-fix-crash-on-XI-1.x-grabs-on-disabled-devices.-5.patch
|
||||
|
||||
%global moduledir %{_libdir}/xorg/modules
|
||||
%global drimoduledir %{_libdir}/dri
|
||||
%global sdkdir %{_includedir}/xorg
|
||||
@ -603,6 +606,10 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{xserver_source_dir}
|
||||
|
||||
%changelog
|
||||
* Wed Nov 28 2012 Peter Hutterer <peter.hutterer@redhat.com> 1.13.0-9
|
||||
- Fix server crash when a XI 1.x device grab is activated on a disabled
|
||||
synaptics touchpad is disabled
|
||||
|
||||
* Tue Nov 27 2012 Jiri Kastner <jkastner@redhat.com> 1.13.0-8
|
||||
- Fix for non-PCI configuration-less setups
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user