From 0d140567ba2b5bf364265dba07de519f691c67a1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 7 Jun 2011 10:42:50 +1000 Subject: [PATCH] dix: fix crashers with floating device. dc57f89959e549403f8488eb9f23425bd7118b22 accidentally reversed the conditions. in dix/events.c we try to detach floating devices. This leads to a NULL-dereference on GetMaster()->id. in dix/getevents.c we try to get the master device for the floating slave and dereference it. Signed-off-by: Peter Hutterer Reviewed-by: Jeremy Huddleston --- dix/events.c | 2 +- dix/getevents.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dix/events.c b/dix/events.c index 3fae52df0..3c7bd50cd 100644 --- a/dix/events.c +++ b/dix/events.c @@ -1421,7 +1421,7 @@ CheckGrabForSyncs(DeviceIntPtr thisDev, Bool thisMode, Bool otherMode) static void DetachFromMaster(DeviceIntPtr dev) { - if (!IsFloating(dev)) + if (IsFloating(dev)) return; dev->saved_master_id = GetMaster(dev, MASTER_ATTACHED)->id; diff --git a/dix/getevents.c b/dix/getevents.c index 1352a81e5..c935c971c 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -864,7 +864,7 @@ positionSprite(DeviceIntPtr dev, int mode, * to the current screen. */ miPointerSetPosition(dev, mode, screenx, screeny); - if(!IsMaster(dev) || !IsFloating(dev)) { + if(!IsMaster(dev) && !IsFloating(dev)) { DeviceIntPtr master = GetMaster(dev, MASTER_POINTER); master->last.valuators[0] = *screenx; master->last.valuators[1] = *screeny; @@ -911,7 +911,7 @@ updateHistory(DeviceIntPtr dev, ValuatorMask *mask, CARD32 ms) return; updateMotionHistory(dev, ms, mask, dev->last.valuators); - if(!IsMaster(dev) || !IsFloating(dev)) + if(!IsMaster(dev) && !IsFloating(dev)) { DeviceIntPtr master = GetMaster(dev, MASTER_POINTER); updateMotionHistory(master, ms, mask, dev->last.valuators);