[PATCH] p54: Fix an error handling path in p54spi_probe()

Christophe JAILLET posted 1 patch 3 years, 10 months ago
There is a newer version of this series
drivers/net/wireless/intersil/p54/p54spi.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH] p54: Fix an error handling path in p54spi_probe()
Posted by Christophe JAILLET 3 years, 10 months ago
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:
-- 
2.34.1
Re: [PATCH] p54: Fix an error handling path in p54spi_probe()
Posted by Larry Finger 3 years, 10 months ago
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
Re: [PATCH] p54: Fix an error handling path in p54spi_probe()
Posted by Christian Lamparter 3 years, 10 months ago
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
>
Re: [PATCH] p54: Fix an error handling path in p54spi_probe()
Posted by Christophe JAILLET 3 years, 10 months ago
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
>>
>