From: Carlos Song <[email protected]>
devm_spi_alloc_controller will allocate an SPI controller and
automatically release a reference on it when dev is unbound from
its driver. It doesn't need to call spi_controller_put explicitly
to put the reference when lpspi driver failed initialization.
Fixes: 2ae0ab0143fc ("spi: lpspi: Avoid potential use-after-free in probe()")
Signed-off-by: Carlos Song <[email protected]>
---
drivers/spi/spi-fsl-lpspi.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c
index 079035db7dd8..92a662d1b55c 100644
--- a/drivers/spi/spi-fsl-lpspi.c
+++ b/drivers/spi/spi-fsl-lpspi.c
@@ -852,39 +852,39 @@ static int fsl_lpspi_probe(struct platform_device *pdev)
fsl_lpspi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
if (IS_ERR(fsl_lpspi->base)) {
ret = PTR_ERR(fsl_lpspi->base);
- goto out_controller_put;
+ return ret;
}
fsl_lpspi->base_phys = res->start;
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
ret = irq;
- goto out_controller_put;
+ return ret;
}
ret = devm_request_irq(&pdev->dev, irq, fsl_lpspi_isr, 0,
dev_name(&pdev->dev), fsl_lpspi);
if (ret) {
dev_err(&pdev->dev, "can't get irq%d: %d\n", irq, ret);
- goto out_controller_put;
+ return ret;
}
fsl_lpspi->clk_per = devm_clk_get(&pdev->dev, "per");
if (IS_ERR(fsl_lpspi->clk_per)) {
ret = PTR_ERR(fsl_lpspi->clk_per);
- goto out_controller_put;
+ return ret;
}
fsl_lpspi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
if (IS_ERR(fsl_lpspi->clk_ipg)) {
ret = PTR_ERR(fsl_lpspi->clk_ipg);
- goto out_controller_put;
+ return ret;
}
/* enable the clock */
ret = fsl_lpspi_init_rpm(fsl_lpspi);
if (ret)
- goto out_controller_put;
+ return ret;
ret = pm_runtime_get_sync(fsl_lpspi->dev);
if (ret < 0) {
@@ -945,8 +945,6 @@ static int fsl_lpspi_probe(struct platform_device *pdev)
pm_runtime_dont_use_autosuspend(fsl_lpspi->dev);
pm_runtime_put_sync(fsl_lpspi->dev);
pm_runtime_disable(fsl_lpspi->dev);
-out_controller_put:
- spi_controller_put(controller);
return ret;
}
--
2.34.1
Hi Carlos!
On Wed, 2024-04-03 at 16:40 +0800, [email protected] wrote:
> devm_spi_alloc_controller will allocate an SPI controller and
> automatically release a reference on it when dev is unbound from
> its driver. It doesn't need to call spi_controller_put explicitly
> to put the reference when lpspi driver failed initialization.
>
> Fixes: 2ae0ab0143fc ("spi: lpspi: Avoid potential use-after-free in probe()")
> Signed-off-by: Carlos Song <[email protected]>
You are absolutely right!
Sorry for the stupid mistake and thanks for the patch!
Reviewed-by: Alexander Sverdlin <[email protected]>
> ---
> drivers/spi/spi-fsl-lpspi.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c
> index 079035db7dd8..92a662d1b55c 100644
> --- a/drivers/spi/spi-fsl-lpspi.c
> +++ b/drivers/spi/spi-fsl-lpspi.c
> @@ -852,39 +852,39 @@ static int fsl_lpspi_probe(struct platform_device *pdev)
> fsl_lpspi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
> if (IS_ERR(fsl_lpspi->base)) {
> ret = PTR_ERR(fsl_lpspi->base);
> - goto out_controller_put;
> + return ret;
> }
> fsl_lpspi->base_phys = res->start;
>
> irq = platform_get_irq(pdev, 0);
> if (irq < 0) {
> ret = irq;
> - goto out_controller_put;
> + return ret;
> }
>
> ret = devm_request_irq(&pdev->dev, irq, fsl_lpspi_isr, 0,
> dev_name(&pdev->dev), fsl_lpspi);
> if (ret) {
> dev_err(&pdev->dev, "can't get irq%d: %d\n", irq, ret);
> - goto out_controller_put;
> + return ret;
> }
>
> fsl_lpspi->clk_per = devm_clk_get(&pdev->dev, "per");
> if (IS_ERR(fsl_lpspi->clk_per)) {
> ret = PTR_ERR(fsl_lpspi->clk_per);
> - goto out_controller_put;
> + return ret;
> }
>
> fsl_lpspi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
> if (IS_ERR(fsl_lpspi->clk_ipg)) {
> ret = PTR_ERR(fsl_lpspi->clk_ipg);
> - goto out_controller_put;
> + return ret;
> }
>
> /* enable the clock */
> ret = fsl_lpspi_init_rpm(fsl_lpspi);
> if (ret)
> - goto out_controller_put;
> + return ret;
>
> ret = pm_runtime_get_sync(fsl_lpspi->dev);
> if (ret < 0) {
> @@ -945,8 +945,6 @@ static int fsl_lpspi_probe(struct platform_device *pdev)
> pm_runtime_dont_use_autosuspend(fsl_lpspi->dev);
> pm_runtime_put_sync(fsl_lpspi->dev);
> pm_runtime_disable(fsl_lpspi->dev);
> -out_controller_put:
> - spi_controller_put(controller);
>
> return ret;
> }
--
Alexander Sverdlin
Siemens AG
http://www.siemens.com
> -----Original Message-----
> From: Sverdlin, Alexander <[email protected]>
> Sent: Wednesday, April 3, 2024 4:51 PM
> To: [email protected]; Carlos Song <[email protected]>
> Cc: [email protected]; [email protected]; Bough Chen
> <[email protected]>; [email protected]; dl-linux-imx
> <[email protected]>; Jun Li <[email protected]>
> Subject: [EXT] Re: [PATCH] spi: spi-fsl-lpspi: remove redundant spi_controller_put
> call
>
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report this
> email' button
>
>
> Hi Carlos!
>
> On Wed, 2024-04-03 at 16:40 +0800, [email protected] wrote:
> > devm_spi_alloc_controller will allocate an SPI controller and
> > automatically release a reference on it when dev is unbound from its
> > driver. It doesn't need to call spi_controller_put explicitly to put
> > the reference when lpspi driver failed initialization.
> >
> > Fixes: 2ae0ab0143fc ("spi: lpspi: Avoid potential use-after-free in
> > probe()")
> > Signed-off-by: Carlos Song <[email protected]>
>
> You are absolutely right!
> Sorry for the stupid mistake and thanks for the patch!
>
> Reviewed-by: Alexander Sverdlin <[email protected]>
>
Hi, Alexander
It doesn't matter:)!
Thanks for your such quick ack.
BR
Carlos
> > ---
> > drivers/spi/spi-fsl-lpspi.c | 14 ++++++--------
> > 1 file changed, 6 insertions(+), 8 deletions(-)
> >
> > diff --git a/drivers/spi/spi-fsl-lpspi.c b/drivers/spi/spi-fsl-lpspi.c
> > index 079035db7dd8..92a662d1b55c 100644
> > --- a/drivers/spi/spi-fsl-lpspi.c
> > +++ b/drivers/spi/spi-fsl-lpspi.c
> > @@ -852,39 +852,39 @@ static int fsl_lpspi_probe(struct platform_device
> *pdev)
> > fsl_lpspi->base = devm_platform_get_and_ioremap_resource(pdev,
> 0, &res);
> > if (IS_ERR(fsl_lpspi->base)) {
> > ret = PTR_ERR(fsl_lpspi->base);
> > - goto out_controller_put;
> > + return ret;
> > }
> > fsl_lpspi->base_phys = res->start;
> >
> > irq = platform_get_irq(pdev, 0);
> > if (irq < 0) {
> > ret = irq;
> > - goto out_controller_put;
> > + return ret;
> > }
> >
> > ret = devm_request_irq(&pdev->dev, irq, fsl_lpspi_isr, 0,
> > dev_name(&pdev->dev), fsl_lpspi);
> > if (ret) {
> > dev_err(&pdev->dev, "can't get irq%d: %d\n", irq, ret);
> > - goto out_controller_put;
> > + return ret;
> > }
> >
> > fsl_lpspi->clk_per = devm_clk_get(&pdev->dev, "per");
> > if (IS_ERR(fsl_lpspi->clk_per)) {
> > ret = PTR_ERR(fsl_lpspi->clk_per);
> > - goto out_controller_put;
> > + return ret;
> > }
> >
> > fsl_lpspi->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
> > if (IS_ERR(fsl_lpspi->clk_ipg)) {
> > ret = PTR_ERR(fsl_lpspi->clk_ipg);
> > - goto out_controller_put;
> > + return ret;
> > }
> >
> > /* enable the clock */
> > ret = fsl_lpspi_init_rpm(fsl_lpspi);
> > if (ret)
> > - goto out_controller_put;
> > + return ret;
> >
> > ret = pm_runtime_get_sync(fsl_lpspi->dev);
> > if (ret < 0) {
> > @@ -945,8 +945,6 @@ static int fsl_lpspi_probe(struct platform_device
> *pdev)
> > pm_runtime_dont_use_autosuspend(fsl_lpspi->dev);
> > pm_runtime_put_sync(fsl_lpspi->dev);
> > pm_runtime_disable(fsl_lpspi->dev);
> > -out_controller_put:
> > - spi_controller_put(controller);
> >
> > return ret;
> > }
>
> --
> Alexander Sverdlin
> Siemens AG
> http://www.siem/
> ens.com%2F&data=05%7C02%7Ccarlos.song%40nxp.com%7C720beaccc4c94dc
> 67f5a08dc53bb3833%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C6
> 38477310781786088%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAi
> LCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata
> =%2BLd5E9xU01iVHHQsoJM9zDbNSpn47cjoNC9yf8qCjjI%3D&reserved=0
On Wed, 03 Apr 2024 16:40:29 +0800, [email protected] wrote:
> devm_spi_alloc_controller will allocate an SPI controller and
> automatically release a reference on it when dev is unbound from
> its driver. It doesn't need to call spi_controller_put explicitly
> to put the reference when lpspi driver failed initialization.
>
>
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
Thanks!
[1/1] spi: spi-fsl-lpspi: remove redundant spi_controller_put call
commit: bff892acf79cec531da6cb21c50980a584ce1476
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark