From 4970d757a7364c1d2fb4db4e404e88e8ad989ddb Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 28 Nov 2008 14:55:15 +1000 Subject: [PATCH] xkb: Extra sanity checks to prevent dev->key == NULL dereferencing. (cherry picked from commit 95fc59a199f99bf167fbb09297a9bb0e33e31869) --- xkb/xkbEvents.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c index 49725d065..36084cc02 100644 --- a/xkb/xkbEvents.c +++ b/xkb/xkbEvents.c @@ -109,7 +109,7 @@ Time time; register CARD16 changed,bState; interest = kbd->xkb_interest; - if (!interest) + if (!interest || !kbd->key || !kbd->key->xkbInfo) return; xkbi = kbd->key->xkbInfo; state= &xkbi->state; @@ -168,6 +168,9 @@ XkbSrvInfoPtr xkbi; unsigned time = 0,initialized; CARD16 changed; + if (!kbd->key || !kbd->key->xkbInfo) + return; + xkbi = kbd->key->xkbInfo; initialized= 0; @@ -291,7 +294,7 @@ XkbInterestPtr interest; Time time = 0; interest = kbd->xkb_interest; - if (!interest) + if (!interest || !kbd->key || !kbd->key->xkbInfo) return; xkbi = kbd->key->xkbInfo; @@ -401,6 +404,9 @@ CARD16 pitch,duration; Time time = 0; XID winID = 0; + if (!kbd->key || !kbd->key->xkbInfo) + return; + xkbi = kbd->key->xkbInfo; if ((force||(xkbi->desc->ctrls->enabled_ctrls&XkbAudibleBellMask))&& @@ -616,11 +622,12 @@ XkbSrvInfoPtr xkbi; XkbInterestPtr interest; Time time = 0; - xkbi = kbd->key->xkbInfo; interest = kbd->xkb_interest; - if (!interest) + if (!interest || !kbd->key || !kbd->key->xkbInfo) return; + xkbi = kbd->key->xkbInfo; + initialized = 0; pEv->mods= xkbi->state.mods; pEv->group= xkbi->state.group; @@ -996,6 +1003,10 @@ unsigned long autoCtrls,autoValues; ClientPtr client = NULL; found= False; + + if (!dev->key || !dev->key->xkbInfo) + return found; + autoCtrls= autoValues= 0; if ( dev->xkb_interest ) { interest = dev->xkb_interest;