Return value of usb_driver_claim_interface should not be ignored.
Instead it should be stored in err variable and returned from
this function.
Signed-off-by: Muhammad Usama Anjum <[email protected]>
---
sound/usb/quirks.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index 9e5e37eff10e..dd32ceaef18a 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -427,10 +427,10 @@ static int create_autodetect_quirks(struct snd_usb_audio *chip,
err = create_autodetect_quirk(chip, iface, driver);
if (err >= 0)
- usb_driver_claim_interface(driver, iface, (void *)-1L);
+ err = usb_driver_claim_interface(driver, iface, (void *)-1L);
}
- return 0;
+ return err;
}
/*
--
2.25.1
On Wed, 2021-03-24 at 21:50 +0300, Dan Carpenter wrote:
> On Wed, Mar 24, 2021 at 10:26:04PM +0500, Muhammad Usama Anjum wrote:
> > Return value of usb_driver_claim_interface should not be ignored.
> > Instead it should be stored in err variable and returned from
> > this function.
> >
> > Signed-off-by: Muhammad Usama Anjum <[email protected]>
> > ---
> > sound/usb/quirks.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> > index 9e5e37eff10e..dd32ceaef18a 100644
> > --- a/sound/usb/quirks.c
> > +++ b/sound/usb/quirks.c
> > @@ -427,10 +427,10 @@ static int create_autodetect_quirks(struct snd_usb_audio *chip,
> >
> > err = create_autodetect_quirk(chip, iface, driver);
> > if (err >= 0)
>
> create_autodetect_quirk() never returns positive values. Flip this
> condition. (Always do error handling, don't do success handling).
>
> if (err)
> continue;
Got it. I'll send a patch.
>
>
> > - usb_driver_claim_interface(driver, iface, (void *)-1L);
> > + err = usb_driver_claim_interface(driver, iface, (void *)-1L);
>
> This is in a loop so only the last return value is used. Which seems
> sort of weird and pointless that the last value would matter more than
> the others.
>
Correct. Lets not store the return value. To stop the static analyzers
to report the missing return assignment, can we add (void) in start of
this function call? I've not seen use of (void) this way in the
kernel. Is there any other way used in the kernel?
> > }
> >
> > - return 0;
> > + return err;
>
> regards,
> dan carpenter
>
On Wed, Mar 24, 2021 at 10:26:04PM +0500, Muhammad Usama Anjum wrote:
> Return value of usb_driver_claim_interface should not be ignored.
> Instead it should be stored in err variable and returned from
> this function.
>
> Signed-off-by: Muhammad Usama Anjum <[email protected]>
> ---
> sound/usb/quirks.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> index 9e5e37eff10e..dd32ceaef18a 100644
> --- a/sound/usb/quirks.c
> +++ b/sound/usb/quirks.c
> @@ -427,10 +427,10 @@ static int create_autodetect_quirks(struct snd_usb_audio *chip,
>
> err = create_autodetect_quirk(chip, iface, driver);
> if (err >= 0)
create_autodetect_quirk() never returns positive values. Flip this
condition. (Always do error handling, don't do success handling).
if (err)
continue;
> - usb_driver_claim_interface(driver, iface, (void *)-1L);
> + err = usb_driver_claim_interface(driver, iface, (void *)-1L);
This is in a loop so only the last return value is used. Which seems
sort of weird and pointless that the last value would matter more than
the others.
> }
>
> - return 0;
> + return err;
regards,
dan carpenter
On Thu, Mar 25, 2021 at 01:24:23AM +0500, Muhammad Usama Anjum wrote:
> On Wed, 2021-03-24 at 21:50 +0300, Dan Carpenter wrote:
> > > - usb_driver_claim_interface(driver, iface, (void *)-1L);
> > > + err = usb_driver_claim_interface(driver, iface, (void *)-1L);
> >
> > This is in a loop so only the last return value is used. Which seems
> > sort of weird and pointless that the last value would matter more than
> > the others.
> >
> Correct. Lets not store the return value. To stop the static analyzers
> to report the missing return assignment, can we add (void) in start of
> this function call? I've not seen use of (void) this way in the
> kernel. Is there any other way used in the kernel?
Don't add (void). Don't add any code just to help static checkers, only
do it if it helps humans. The (void) stuff is ugly. We have a
__must_check annotation for functions where it's a bug not to check the
return and the usb_driver_claim_interface() is not a __must_check
function. Just ignore the static checker when it's wrong.
When I'm reviewing static checker warnings, I only look at the new ones.
Then after I've looked at them, I mark them as old. I currently have
65k old ignored warnings.
regards,
dan carpenter