diff options
author | Lukas Wunner <lukas@wunner.de> | 2020-12-07 09:17:07 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2020-12-07 14:18:52 +0000 |
commit | cc53711b2191cf3b3210283ae89bf0abb98c70a3 (patch) | |
tree | c73e03cc7869c64f13527fe69d64af0aae94f7c8 /drivers/spi | |
parent | 393f981ca5f797b58b882d42b7621fb6e43c7f5b (diff) | |
download | linux-cc53711b2191cf3b3210283ae89bf0abb98c70a3.tar.gz linux-cc53711b2191cf3b3210283ae89bf0abb98c70a3.tar.bz2 linux-cc53711b2191cf3b3210283ae89bf0abb98c70a3.zip |
spi: mxic: Don't leak SPI master in probe error path
If the calls to devm_clk_get() or devm_ioremap_resource() fail on probe
of the Macronix SPI driver, the spi_master struct is erroneously not freed.
Fix by switching over to the new devm_spi_alloc_master() helper.
Fixes: b942d80b0a39 ("spi: Add MXIC controller driver")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: <stable@vger.kernel.org> # v5.0+: 5e844cc37a5c: spi: Introduce device-managed SPI controller allocation
Cc: <stable@vger.kernel.org> # v5.0+
Cc: Mason Yang <masonccyang@mxic.com.tw>
Link: https://lore.kernel.org/r/4fa6857806e7e75741c05d057ac9df3564460114.1607286887.git.lukas@wunner.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/spi-mxic.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/spi/spi-mxic.c b/drivers/spi/spi-mxic.c index 8c630acb0110..96b418293bf2 100644 --- a/drivers/spi/spi-mxic.c +++ b/drivers/spi/spi-mxic.c @@ -529,7 +529,7 @@ static int mxic_spi_probe(struct platform_device *pdev) struct mxic_spi *mxic; int ret; - master = spi_alloc_master(&pdev->dev, sizeof(struct mxic_spi)); + master = devm_spi_alloc_master(&pdev->dev, sizeof(struct mxic_spi)); if (!master) return -ENOMEM; @@ -574,15 +574,9 @@ static int mxic_spi_probe(struct platform_device *pdev) ret = spi_register_master(master); if (ret) { dev_err(&pdev->dev, "spi_register_master failed\n"); - goto err_put_master; + pm_runtime_disable(&pdev->dev); } - return 0; - -err_put_master: - spi_master_put(master); - pm_runtime_disable(&pdev->dev); - return ret; } |