diff mbox series

p54: Fix an error handling path in p54spi_probe()

Message ID 41d88dff4805800691bf4909b14c6122755f7e28.1655063685.git.christophe.jaillet@wanadoo.fr (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series p54: Fix an error handling path in p54spi_probe() | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Christophe JAILLET June 12, 2022, 7:54 p.m. UTC
If an error occurs after a successful call to p54spi_request_firmware(), it
must be undone by a corresponding release_firmware() as already done in
the error handling path of p54spi_request_firmware() and in the .remove()
function.

Add the missing call in the error handling path and update some goto
label accordingly.

Fixes: cd8d3d321285 ("p54spi: p54spi driver")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
 drivers/net/wireless/intersil/p54/p54spi.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Larry Finger June 12, 2022, 8:45 p.m. UTC | #1
On 6/12/22 14:54, Christophe JAILLET wrote:
> If an error occurs after a successful call to p54spi_request_firmware(), it
> must be undone by a corresponding release_firmware() as already done in
> the error handling path of p54spi_request_firmware() and in the .remove()
> function.
> 
> Add the missing call in the error handling path and update some goto
> label accordingly.
> 
> Fixes: cd8d3d321285 ("p54spi: p54spi driver")
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---
>   drivers/net/wireless/intersil/p54/p54spi.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/wireless/intersil/p54/p54spi.c b/drivers/net/wireless/intersil/p54/p54spi.c
> index f99b7ba69fc3..679ac164c994 100644
> --- a/drivers/net/wireless/intersil/p54/p54spi.c
> +++ b/drivers/net/wireless/intersil/p54/p54spi.c
> @@ -650,14 +650,16 @@ static int p54spi_probe(struct spi_device *spi)
>   
>   	ret = p54spi_request_eeprom(hw);
>   	if (ret)
> -		goto err_free_common;
> +		goto err_release_firmaware;
>   
>   	ret = p54_register_common(hw, &priv->spi->dev);
>   	if (ret)
> -		goto err_free_common;
> +		goto err_release_firmaware;
>   
>   	return 0;
>   
> +err_release_firmaware:
> +	release_firmware(priv->firmware);
>   err_free_common:
>   	free_irq(gpio_to_irq(p54spi_gpio_irq), spi);
>   err_free_gpio_irq:

Why "err_release_firmaware" rather than "err_release_firmware"? Otherwise the 
patch looks good.

Larry
Christian Lamparter June 12, 2022, 8:45 p.m. UTC | #2
Hi,

On Sun, Jun 12, 2022 at 9:55 PM Christophe JAILLET
<christophe.jaillet@wanadoo.fr> wrote:
>
> If an error occurs after a successful call to p54spi_request_firmware(), it
> must be undone by a corresponding release_firmware()

Yes, good catch. That makes sense.

> as already done in the error handling path of p54spi_request_firmware() and in
> the .remove() function.
>
> Add the missing call in the error handling path and update some goto
> label accordingly.

From what I know, "release_firmware(some *fw)" includes a check for
*fw != NULL already.

we could just add a single release_firmware(priv->firmware) to any of the error
paths labels (i.e.: err_free_common) and then we remove the extra
release_firmware(...) in p54spi_request_firmware so that we don't try to free
it twice.

(This also skips the need for having "err_release_firmaware" .. which
unfortunately has a small typo)

Regards,
Christian

> Fixes: cd8d3d321285 ("p54spi: p54spi driver")
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> ---
>  drivers/net/wireless/intersil/p54/p54spi.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/intersil/p54/p54spi.c b/drivers/net/wireless/intersil/p54/p54spi.c
> index f99b7ba69fc3..679ac164c994 100644
> --- a/drivers/net/wireless/intersil/p54/p54spi.c
> +++ b/drivers/net/wireless/intersil/p54/p54spi.c
> @@ -650,14 +650,16 @@ static int p54spi_probe(struct spi_device *spi)
>
>         ret = p54spi_request_eeprom(hw);
>         if (ret)
> -               goto err_free_common;
> +               goto err_release_firmaware;
>
>         ret = p54_register_common(hw, &priv->spi->dev);
>         if (ret)
> -               goto err_free_common;
> +               goto err_release_firmaware;
>
>         return 0;
>
> +err_release_firmaware:
> +       release_firmware(priv->firmware);
>  err_free_common:
>         free_irq(gpio_to_irq(p54spi_gpio_irq), spi);
>  err_free_gpio_irq:
> --
> 2.34.1
>
Christophe JAILLET June 12, 2022, 9:02 p.m. UTC | #3
Le 12/06/2022 à 22:45, Christian Lamparter a écrit :
> Hi,
> 
> On Sun, Jun 12, 2022 at 9:55 PM Christophe JAILLET
> <christophe.jaillet@wanadoo.fr> wrote:
>>
>> If an error occurs after a successful call to p54spi_request_firmware(), it
>> must be undone by a corresponding release_firmware()
> 
> Yes, good catch. That makes sense.
> 
>> as already done in the error handling path of p54spi_request_firmware() and in
>> the .remove() function.
>>
>> Add the missing call in the error handling path and update some goto
>> label accordingly.
> 
>  From what I know, "release_firmware(some *fw)" includes a check for
> *fw != NULL already.

Correct.

> 
> we could just add a single release_firmware(priv->firmware) to any of the error

Not my favorite style, but if it is preferred this way, NP.

> paths labels (i.e.: err_free_common) and then we remove the extra
> release_firmware(...) in p54spi_request_firmware so that we don't try to free
> it twice.

Sure. I'll add a comment to explain where is is released in case of error.

> 
> (This also skips the need for having "err_release_firmaware" .. which
> unfortunately has a small typo)
> 
> Regards,
> Christian
> 
>> Fixes: cd8d3d321285 ("p54spi: p54spi driver")
>> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
>> ---
>>   drivers/net/wireless/intersil/p54/p54spi.c | 6 ++++--
>>   1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/net/wireless/intersil/p54/p54spi.c b/drivers/net/wireless/intersil/p54/p54spi.c
>> index f99b7ba69fc3..679ac164c994 100644
>> --- a/drivers/net/wireless/intersil/p54/p54spi.c
>> +++ b/drivers/net/wireless/intersil/p54/p54spi.c
>> @@ -650,14 +650,16 @@ static int p54spi_probe(struct spi_device *spi)
>>
>>          ret = p54spi_request_eeprom(hw);
>>          if (ret)
>> -               goto err_free_common;
>> +               goto err_release_firmaware;
>>
>>          ret = p54_register_common(hw, &priv->spi->dev);
>>          if (ret)
>> -               goto err_free_common;
>> +               goto err_release_firmaware;
>>
>>          return 0;
>>
>> +err_release_firmaware:
>> +       release_firmware(priv->firmware);
>>   err_free_common:
>>          free_irq(gpio_to_irq(p54spi_gpio_irq), spi);
>>   err_free_gpio_irq:
>> --
>> 2.34.1
>>
>
diff mbox series

Patch

diff --git a/drivers/net/wireless/intersil/p54/p54spi.c b/drivers/net/wireless/intersil/p54/p54spi.c
index f99b7ba69fc3..679ac164c994 100644
--- a/drivers/net/wireless/intersil/p54/p54spi.c
+++ b/drivers/net/wireless/intersil/p54/p54spi.c
@@ -650,14 +650,16 @@  static int p54spi_probe(struct spi_device *spi)
 
 	ret = p54spi_request_eeprom(hw);
 	if (ret)
-		goto err_free_common;
+		goto err_release_firmaware;
 
 	ret = p54_register_common(hw, &priv->spi->dev);
 	if (ret)
-		goto err_free_common;
+		goto err_release_firmaware;
 
 	return 0;
 
+err_release_firmaware:
+	release_firmware(priv->firmware);
 err_free_common:
 	free_irq(gpio_to_irq(p54spi_gpio_irq), spi);
 err_free_gpio_irq: