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 <http://bugs.freedesktop.org/show_bug.cgi?id=29669> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
7925e89456
commit
ff055506f0
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue