Disabling a XTest device followed by an XTest API call crashes the server. This could be fixed elsewhere but disabled devices must not send events anyway. The use-case for disabled XTest devices is somewhat limited, so simply disallow disabling the devices.
Signed-off-by: Peter Hutterer <[email protected]> --- Xi/chgdctl.c | 5 ++++- dix/devices.c | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Xi/chgdctl.c b/Xi/chgdctl.c index 9fe69a5..d47a588 100644 --- a/Xi/chgdctl.c +++ b/Xi/chgdctl.c @@ -186,7 +186,10 @@ ProcXChangeDeviceControl(ClientPtr client) case DEVICE_ENABLE: e = (xDeviceEnableCtl *) &stuff[1]; - status = ChangeDeviceControl(client, dev, (xDeviceCtl *) e); + if (IsXTestDevice(dev, NULL)) + status = !Success; + else + status = ChangeDeviceControl(client, dev, (xDeviceCtl *) e); if (status == Success) { if (e->enable) diff --git a/dix/devices.c b/dix/devices.c index 66d4406..7a7d03f 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -146,8 +146,10 @@ DeviceSetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, return BadValue; /* Don't allow disabling of VCP/VCK */ - if ((dev == inputInfo.pointer ||dev == - inputInfo.keyboard) &&!(*(CARD8 *) prop->data)) + if ((dev == inputInfo.pointer || + dev == inputInfo.keyboard || + IsXTestDevice(dev, NULL)) + &&!(*(CARD8 *) prop->data)) return BadAccess; if (!checkonly) { -- 1.7.11.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
