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 |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
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
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 >
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 --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:
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(-)