[PATCH v2 2/7] xkb: Fix possible NULL pointer dereference

Peter Hutterer peter.hutterer at who-t.net
Wed Jul 28 18:22:16 PDT 2010


On Wed, Jul 28, 2010 at 10:47:02PM +0300, Pauli Nieminen wrote:
> changes is deferenced unconditionaly later on in function. Because
> XkbUpdateKeyTypesFromCore is exported function paramters should be
                                                 ^ typo

> checked for driver errors.
> 
> Fixes:
> Variable "changes" tracked as NULL was dereferenced.
> 
> Signed-off-by: Pauli Nieminen <ext-pauli.nieminen at nokia.com>
> ---
> 
> Added NULL check for changes because it deferenced unconditionaly in
> function that can be called by drivers.
> 
>  xkb/xkbUtils.c |   11 +++++++----
>  1 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
> index 14dc784..bf0affb 100644
> --- a/xkb/xkbUtils.c
> +++ b/xkb/xkbUtils.c
> @@ -223,16 +223,19 @@ XkbDescPtr		xkb;
>  unsigned		key,nG,explicit;
>  int			types[XkbNumKbdGroups];
>  KeySym			tsyms[XkbMaxSymsPerKey],*syms;
> -XkbMapChangesPtr	mc;
> +
> +    if (!changes) {
> +	LogMessage(X_ERROR, "XKB: XkbUpdateKeyTypesFromCore without changes\n");
> +	return;
> +    }
>  
>      xkb= pXDev->key->xkbInfo->desc;
> +

unnecessary whitespace change.

>      if (first+num-1>xkb->max_key_code) {
>  	/* 1/12/95 (ef) -- XXX! should allow XKB structures to grow */
>  	num= xkb->max_key_code-first+1;
>      }
>  
> -    mc= (changes?(&changes->map):NULL);
> -
>      syms= &pCore->map[(first - pCore->minKeyCode) * pCore->mapWidth];
>      for (key=first; key<(first+num); key++,syms+= pCore->mapWidth) {
>          explicit= xkb->server->explicit[key]&XkbExplicitKeyTypesMask;
> @@ -242,7 +245,7 @@ XkbMapChangesPtr	mc;
>          types[XkbGroup4Index]= XkbKeyKeyTypeIndex(xkb,key,XkbGroup4Index);
>          nG= XkbKeyTypesForCoreSymbols(xkb,pCore->mapWidth,syms,explicit,types,
>  									tsyms);
> -	XkbChangeTypesOfKey(xkb,key,nG,XkbAllGroupsMask,types,mc);
> +	XkbChangeTypesOfKey(xkb,key,nG,XkbAllGroupsMask,types,&changes->map);
>  	memcpy((char *)XkbKeySymsPtr(xkb,key),(char *)tsyms,
>  					XkbKeyNumSyms(xkb,key)*sizeof(KeySym));
>      }
> -- 
> 1.6.3.3

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net> with the typo fixed
and whitespace change removed.
 
Cheers,
  Peter


More information about the xorg-devel mailing list