FAILED: patch "[PATCH] spi: bcm2835aux: Fix use-after-free on unbind" failed to apply to 4.19-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e13ee6cc4781edaf8c7321bee19217e3702ed481 Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Wed, 11 Nov 2020 20:07:30 +0100
Subject: [PATCH] spi: bcm2835aux: Fix use-after-free on unbind
bcm2835aux_spi_remove() accesses the driver's private data after calling spi_unregister_master() even though that function releases the last reference on the spi_master and thereby frees the private data.
Fix by switching over to the new devm_spi_alloc_master() helper which keeps the private data accessible until the driver has unbound.
drivers/spi/spi-bcm2835aux.c +7 -14
@@ -494,7 +494,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)unsigned long clk_hz;int err; - master =spi_alloc_master (&pdev->dev,sizeof (*bs)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*bs));if (!master)return -ENOMEM ;
@@ -524,29 +524,24 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)/* the main area */ bs->regs =devm_platform_ioremap_resource (pdev,0 ); -if (IS_ERR (bs->regs)) { - err =PTR_ERR (bs->regs); - goto out_master_put; - } +if (IS_ERR (bs->regs)) +return PTR_ERR (bs->regs); bs->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (bs->clk)) { - err =PTR_ERR (bs->clk);dev_err (&pdev->dev,"could not get clk: %d\n" , err); - goto out_master_put; +return PTR_ERR (bs->clk); } bs->irq =platform_get_irq (pdev,0 ); -if (bs->irq <=0 ) { - err = bs->irq ? bs->irq : -ENODEV ; - goto out_master_put; - } +if (bs->irq <=0 ) +return bs->irq ? bs->irq : -ENODEV ;/* this also enables the HW block */ err =clk_prepare_enable (bs->clk);if (err) {dev_err (&pdev->dev,"could not prepare clock: %d\n" , err); - goto out_master_put; +return err; }/* just checking if the clock returns a sane value */
@@ -581,8 +576,6 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) out_clk_disable:clk_disable_unprepare (bs->clk); -out_master_put: -spi_master_put (master);return err; }
Quoted 4 lines · On Mon, Nov 23, 2020 at 09:54:04AM +0100, [email protected] wrote:
The patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Below please find the backport of e13ee6cc4781 to linux-4.19.y.
Be aware that it depends on commit 5e844cc37a5c ("spi: Introduce device-managed SPI controller allocation").
Thanks!
-- >8 --
Subject: [PATCH] spi: bcm2835aux: Fix use-after-free on unbind
[ Upstream commit e13ee6cc4781edaf8c7321bee19217e3702ed481 ]
bcm2835aux_spi_remove() accesses the driver's private data after calling spi_unregister_master() even though that function releases the last reference on the spi_master and thereby frees the private data.
Fix by switching over to the new devm_spi_alloc_master() helper which keeps the private data accessible until the driver has unbound.
--- drivers/spi/spi-bcm2835aux.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
drivers/spi/spi-bcm2835aux.c +6 -11
@@ -407,7 +407,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)unsigned long clk_hz;int err; - master =spi_alloc_master (&pdev->dev,sizeof (*bs)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*bs));if (!master) {dev_err (&pdev->dev,"spi_alloc_master() failed\n" );return -ENOMEM ;
@@ -439,30 +439,27 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)/* the main area */ res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); bs->regs =devm_ioremap_resource (&pdev->dev, res); -if (IS_ERR (bs->regs)) { - err =PTR_ERR (bs->regs); - goto out_master_put; - } +if (IS_ERR (bs->regs)) +return PTR_ERR (bs->regs); bs->clk =devm_clk_get (&pdev->dev,NULL );if ((!bs->clk) || (IS_ERR (bs->clk))) { err =PTR_ERR (bs->clk);dev_err (&pdev->dev,"could not get clk: %d\n" , err); - goto out_master_put; +return err; } bs->irq =platform_get_irq (pdev,0 );if (bs->irq <=0 ) {dev_err (&pdev->dev,"could not get IRQ: %d\n" , bs->irq); - err = bs->irq ? bs->irq : -ENODEV ; - goto out_master_put; +return bs->irq ? bs->irq : -ENODEV ; }/* this also enables the HW block */ err =clk_prepare_enable (bs->clk);if (err) {dev_err (&pdev->dev,"could not prepare clock: %d\n" , err); - goto out_master_put; +return err; }/* just checking if the clock returns a sane value */
@@ -495,8 +492,6 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) out_clk_disable:clk_disable_unprepare (bs->clk); -out_master_put: -spi_master_put (master);return err; }
Signature · 1 line
2.29.2
Greg KH
maintainerQuoted 10 lines · Lukas Wunner
Quoted 4 lines · On Mon, Nov 23, 2020 at 09:54:04AM +0100, [email protected] wrote:
The patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.Below please find the backport of
e13ee6cc4781to linux-4.19.y.Be aware that it depends on commit
5e844cc37a5c("spi: Introduce device-managed SPI controller allocation").
<snip>
Ok, I'm totally confused by all of these different attachments, dependancies, and different versions.
Can you send me a patch series for the different stable trees with the specific patches backported already, as I am lost with all of these responses and threads, sorry.
thanks,
greg k-h