FAILED: patch "[PATCH] spi: mt7621: Don't leak SPI master in probe error path" 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 46b5c4fb87ce8211e0f9b0383dbde72c3652d2ba Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Mon, 7 Dec 2020 09:17:14 +0100
Subject: [PATCH] spi: mt7621: Don't leak SPI master in probe error path
If the calls to device_reset() or devm_spi_register_controller() fail on probe of the MediaTek MT7621 SPI driver, the spi_controller struct is erroneously not freed. Fix by switching over to the new devm_spi_alloc_master() helper.
Additionally, there's an ordering issue in mt7621_spi_remove() wherein the spi_controller is unregistered after disabling the SYS clock. The correct order is to call spi_unregister_controller() *before* this teardown step because bus accesses may still be ongoing until that function returns.
All of these bugs have existed since the driver was first introduced, so it seems fair to fix them together in a single commit.
drivers/spi/spi-mt7621.c +3 -2
@@ -350,7 +350,7 @@ static int mt7621_spi_probe(struct platform_device *pdev)if (status)return status; - master =spi_alloc_master (&pdev->dev,sizeof (*rs)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*rs));if (!master) {dev_info (&pdev->dev,"master allocation failed\n" );clk_disable_unprepare (clk);
@@ -382,7 +382,7 @@ static int mt7621_spi_probe(struct platform_device *pdev)return ret; } - ret =devm_spi_register_controller (&pdev->dev, master); + ret =spi_register_controller (master);if (ret)clk_disable_unprepare (clk);
@@ -397,6 +397,7 @@ static int mt7621_spi_remove(struct platform_device *pdev) master =dev_get_drvdata (&pdev->dev); rs =spi_controller_get_devdata (master); +spi_unregister_controller (master);clk_disable_unprepare (rs->clk);return 0 ;
Lukas Wunner
Reviewed-by Stefan RoeseQuoted 4 lines · On Mon, Dec 28, 2020 at 12:07:29PM +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]>.
Here's the backport of 46b5c4fb87ce to v4.19.192:
-- >8 --
From: Lukas Wunner <[email protected]>
Date: Mon, 7 Dec 2020 09:17:14 +0100
Subject: [PATCH] spi: mt7621: Don't leak SPI master in probe error path
commit 46b5c4fb87ce8211e0f9b0383dbde72c3652d2ba upstream.
If the calls to device_reset() or spi_register_master() fail on probe of the MediaTek MT7621 SPI driver, the spi_master struct is erroneously not freed. Fix by switching over to the new devm_spi_alloc_master() helper.
Additionally, there's an ordering issue in mt7621_spi_remove() wherein the spi_master is unregistered after disabling the SYS clock. The correct order is to call spi_unregister_master() *before* this teardown step because bus accesses may still be ongoing until that function returns. Moreover, the clock is disabled but not unprepared.
All of these bugs have existed since the driver was first introduced, so it seems fair to fix them together in a single commit.
--- drivers/staging/mt7621-spi/spi-mt7621.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/staging/mt7621-spi/spi-mt7621.c +2 -2
@@ -452,7 +452,7 @@ static int mt7621_spi_probe(struct platform_device *pdev)if (status)return status; - master =spi_alloc_master (&pdev->dev,sizeof (*rs)); + master =devm_spi_alloc_master (&pdev->dev,sizeof (*rs));if (master ==NULL ) {dev_info (&pdev->dev,"master allocation failed\n" );clk_disable_unprepare (clk);
@@ -502,8 +502,8 @@ static int mt7621_spi_remove(struct platform_device *pdev) master =dev_get_drvdata (&pdev->dev); rs =spi_master_get_devdata (master); -clk_disable (rs->clk);spi_unregister_master (master); +clk_disable_unprepare (rs->clk);return 0 ; }
Signature · 1 line
2.31.1