From ff055506f0cbb852bed17acb9f9bbf1d715a854e Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 23 Aug 2010 13:20:09 +1000 Subject: [PATCH] dix: fix crash when removing devices on a buttonless MD pointer (#29669) If the master does not have a button class, recalculating the number of buttons required for this master dereferences a NULL pointer. Guard against this, if the master pointer doesn't have a button class, it doesn't need to update it's number of buttons. Reproducible: Two devices on the same master, device NB with axes but no buttons, device A+B with axes and button . If NB was the last one to send an event through the master when A+B is removed from the server, master->button is NULL and leads to the above NULL-pointer dereference. X.Org Bug 29669 Signed-off-by: Peter Hutterer Reviewed-by: Keith Packard --- dix/devices.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dix/devices.c b/dix/devices.c index 62ff4b04c..f5d295295 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -2341,7 +2341,7 @@ RecalculateMasterButtons(DeviceIntPtr slave) maxbuttons = max(maxbuttons, dev->button->numButtons); } - if (master->button->numButtons != maxbuttons) + if (master->button && master->button->numButtons != maxbuttons) { int i; DeviceChangedEvent event;