[PATCH] input: Remove invalid bug checks.

Peter Hutterer peter.hutterer at who-t.net
Mon Apr 7 18:11:14 PDT 2014


On Wed, Apr 02, 2014 at 05:14:05PM +0300, Michal Srb wrote:
> Commit 2f1aedcaed8fd99b823d451bf1fb02330c078f67 added several bug checks. Some
> of them are not correct.
> 
> Checks in Init(Ptr|String|Bell|Led|Integer)FeedbackClassDeviceStruct verify
> that no feedback struct was set yet, but that is not required. If any feedback
> structs are already present, the function will chain them behind the new one.
> 
> Signed-off-by: Michal Srb <msrb at suse.com>
> ---
> Presence of this check caused crashes in Xen. The virtual pointer there has
> both relative and absolute axis. InitPtrFeedbackClassDeviceStruct got called
> twice, first from EvdevAddRelValuatorClass then from EvdevAddAbsValuatorClass.
> The second call fails because of this bug check which makes
> EvdevAddAbsValuatorClass revert some EvdevPtr members to zero. That leads to
> crashes later when absolute events came for processing.

this is a bug in evdev that we should fix separately, but ACK to this patch,
I've merged it into my tree. thanks.

Cheers,
   Peter

> 
> diff --git a/dix/devices.c b/dix/devices.c
> index ab923d5..73f60f4 100644
> --- a/dix/devices.c
> +++ b/dix/devices.c
> @@ -1475,7 +1475,6 @@ InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
>      PtrFeedbackPtr feedc;
>  
>      BUG_RETURN_VAL(dev == NULL, FALSE);
> -    BUG_RETURN_VAL(dev->ptrfeed != NULL, FALSE);
>  
>      feedc = malloc(sizeof(PtrFeedbackClassRec));
>      if (!feedc)
> @@ -1519,7 +1518,6 @@ InitStringFeedbackClassDeviceStruct(DeviceIntPtr dev,
>      StringFeedbackPtr feedc;
>  
>      BUG_RETURN_VAL(dev == NULL, FALSE);
> -    BUG_RETURN_VAL(dev->stringfeed != NULL, FALSE);
>  
>      feedc = malloc(sizeof(StringFeedbackClassRec));
>      if (!feedc)
> @@ -1556,7 +1554,6 @@ InitBellFeedbackClassDeviceStruct(DeviceIntPtr dev, BellProcPtr bellProc,
>      BellFeedbackPtr feedc;
>  
>      BUG_RETURN_VAL(dev == NULL, FALSE);
> -    BUG_RETURN_VAL(dev->bell != NULL, FALSE);
>  
>      feedc = malloc(sizeof(BellFeedbackClassRec));
>      if (!feedc)
> @@ -1578,7 +1575,6 @@ InitLedFeedbackClassDeviceStruct(DeviceIntPtr dev, LedCtrlProcPtr controlProc)
>      LedFeedbackPtr feedc;
>  
>      BUG_RETURN_VAL(dev == NULL, FALSE);
> -    BUG_RETURN_VAL(dev->leds != NULL, FALSE);
>  
>      feedc = malloc(sizeof(LedFeedbackClassRec));
>      if (!feedc)
> @@ -1601,7 +1597,6 @@ InitIntegerFeedbackClassDeviceStruct(DeviceIntPtr dev,
>      IntegerFeedbackPtr feedc;
>  
>      BUG_RETURN_VAL(dev == NULL, FALSE);
> -    BUG_RETURN_VAL(dev->intfeed != NULL, FALSE);
>  
>      feedc = malloc(sizeof(IntegerFeedbackClassRec));
>      if (!feedc)
> 


More information about the xorg-devel mailing list