Commit c2fb1a7b authored by Alan Coopersmith's avatar Alan Coopersmith

ProcQueryKeymap: rework logic around permission to copy key states

Always initialize to zero, and then if permission is granted, copy
the current key state maps, instead of always copying and then
zeroing out if permission was denied.
Signed-off-by: default avatarAlan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: default avatarKeith Packard <keithp@keithp.com>
Tested-by: default avatarDaniel Stone <daniel@fooishbar.org>
parent dccb0858
......@@ -2388,17 +2388,19 @@ ProcQueryKeymap(ClientPtr client)
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
rep.length = 2;
memset(rep.map, 0, 32);
rc = XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixReadAccess);
if (rc != Success && rc != BadAccess)
/* If rc is Success, we're allowed to copy out the keymap.
* If it's BadAccess, we leave it empty & lie to the client.
*/
if (rc == Success) {
for (i = 0; i < 32; i++)
rep.map[i] = down[i];
}
else if (rc != BadAccess)
return rc;
for (i = 0; i < 32; i++)
rep.map[i] = down[i];
if (rc == BadAccess)
memset(rep.map, 0, 32);
WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
return Success;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment