Xi: XIGetSelectedEvents mustn't returned masks from non-existing devices.
Or devices the client doesn't have XACE permissions for. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
7868956b0f
commit
22b4ac44e4
|
@ -170,6 +170,7 @@ ProcXIGetSelectedEvents(ClientPtr client)
|
||||||
OtherInputMasks *masks;
|
OtherInputMasks *masks;
|
||||||
InputClientsPtr others = NULL;
|
InputClientsPtr others = NULL;
|
||||||
xXIEventMask *evmask = NULL;
|
xXIEventMask *evmask = NULL;
|
||||||
|
DeviceIntPtr dev;
|
||||||
|
|
||||||
REQUEST(xXIGetSelectedEventsReq);
|
REQUEST(xXIGetSelectedEventsReq);
|
||||||
REQUEST_SIZE_MATCH(xXIGetSelectedEventsReq);
|
REQUEST_SIZE_MATCH(xXIGetSelectedEventsReq);
|
||||||
|
@ -211,6 +212,14 @@ ProcXIGetSelectedEvents(ClientPtr client)
|
||||||
int j;
|
int j;
|
||||||
unsigned char *devmask = others->xi2mask[i];
|
unsigned char *devmask = others->xi2mask[i];
|
||||||
|
|
||||||
|
if (i > 2)
|
||||||
|
{
|
||||||
|
rc = dixLookupDevice(&dev, i, client, DixReadAccess);
|
||||||
|
if (rc != Success)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (j = XI2MASKSIZE - 1; j >= 0; j--)
|
for (j = XI2MASKSIZE - 1; j >= 0; j--)
|
||||||
{
|
{
|
||||||
if (devmask[j] != 0)
|
if (devmask[j] != 0)
|
||||||
|
|
Loading…
Reference in New Issue