* [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path
@ 2026-01-09 12:49 Felix Gu
2026-01-09 17:40 ` Markus Elfring
2026-01-13 11:42 ` Mark Brown
0 siblings, 2 replies; 5+ messages in thread
From: Felix Gu @ 2026-01-09 12:49 UTC (permalink / raw)
To: Mark Brown, Orson Zhai, Baolin Wang, Chunyan Zhang
Cc: linux-spi, linux-kernel, Felix Gu
The driver currently uses spi_alloc_host() to allocate the controller
but registers it using devm_spi_register_controller().
If devm_register_restart_handler() fails, the code jumps to the
put_ctlr label and calls spi_controller_put(). However, since the
controller was registered via a devm function, the device core will
automatically call spi_controller_put() again when the probe fails.
This results in a double-free of the spi_controller structure.
Fix this by switching to devm_spi_alloc_host() and removing the
manual spi_controller_put() call.
Fixes: ac17750 ("spi: sprd: Add the support of restarting the system")
Signed-off-by: Felix Gu <gu_0233@qq.com>
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
---
Changes in v2:
- Added Fixes: tag.
- Added Baolin's Reviewed-by tag.
- Link to v1: https://lore.kernel.org/lkml/tencent_4588081F26734D4306AEE239F31016318205@qq.com/
---
drivers/spi/spi-sprd-adi.c | 33 ++++++++++-----------------------
1 file changed, 10 insertions(+), 23 deletions(-)
diff --git a/drivers/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c
index 262c11d977ea..f25b34a91756 100644
--- a/drivers/spi/spi-sprd-adi.c
+++ b/drivers/spi/spi-sprd-adi.c
@@ -528,7 +528,7 @@ static int sprd_adi_probe(struct platform_device *pdev)
pdev->id = of_alias_get_id(np, "spi");
num_chipselect = of_get_child_count(np);
- ctlr = spi_alloc_host(&pdev->dev, sizeof(struct sprd_adi));
+ ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(struct sprd_adi));
if (!ctlr)
return -ENOMEM;
@@ -536,10 +536,8 @@ static int sprd_adi_probe(struct platform_device *pdev)
sadi = spi_controller_get_devdata(ctlr);
sadi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
- if (IS_ERR(sadi->base)) {
- ret = PTR_ERR(sadi->base);
- goto put_ctlr;
- }
+ if (IS_ERR(sadi->base))
+ return PTR_ERR(sadi->base);
sadi->slave_vbase = (unsigned long)sadi->base +
data->slave_offset;
@@ -551,18 +549,15 @@ static int sprd_adi_probe(struct platform_device *pdev)
if (ret > 0 || (IS_ENABLED(CONFIG_HWSPINLOCK) && ret == 0)) {
sadi->hwlock =
devm_hwspin_lock_request_specific(&pdev->dev, ret);
- if (!sadi->hwlock) {
- ret = -ENXIO;
- goto put_ctlr;
- }
+ if (!sadi->hwlock)
+ return -ENXIO;
} else {
switch (ret) {
case -ENOENT:
dev_info(&pdev->dev, "no hardware spinlock supplied\n");
break;
default:
- dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n");
- goto put_ctlr;
+ return dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n");
}
}
@@ -579,26 +574,18 @@ static int sprd_adi_probe(struct platform_device *pdev)
ctlr->transfer_one = sprd_adi_transfer_one;
ret = devm_spi_register_controller(&pdev->dev, ctlr);
- if (ret) {
- dev_err(&pdev->dev, "failed to register SPI controller\n");
- goto put_ctlr;
- }
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "failed to register SPI controller\n");
if (sadi->data->restart) {
ret = devm_register_restart_handler(&pdev->dev,
sadi->data->restart,
sadi);
- if (ret) {
- dev_err(&pdev->dev, "can not register restart handler\n");
- goto put_ctlr;
- }
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "can not register restart handler\n");
}
return 0;
-
-put_ctlr:
- spi_controller_put(ctlr);
- return ret;
}
static struct sprd_adi_data sc9860_data = {
---
base-commit: fc4e91c639c0af93d63c3d5bc0ee45515dd7504a
change-id: 20260108-spi-sprd-adi-fix-c071bf124bf6
Best regards,
--
Felix Gu <gu_0233@qq.com>
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path
2026-01-09 12:49 [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path Felix Gu
@ 2026-01-09 17:40 ` Markus Elfring
2026-01-13 11:42 ` Mark Brown
1 sibling, 0 replies; 5+ messages in thread
From: Markus Elfring @ 2026-01-09 17:40 UTC (permalink / raw)
To: Felix Gu, linux-spi, Baolin Wang, Chunyan Zhang, Mark Brown,
Orson Zhai
Cc: LKML
> Fixes: ac17750 ("spi: sprd: Add the support of restarting the system")
Please choose a longer hash.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.19-rc4#n145
Regards,
Markus
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path
2026-01-09 12:49 [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path Felix Gu
2026-01-09 17:40 ` Markus Elfring
@ 2026-01-13 11:42 ` Mark Brown
2026-01-13 19:20 ` Markus Elfring
1 sibling, 1 reply; 5+ messages in thread
From: Mark Brown @ 2026-01-13 11:42 UTC (permalink / raw)
To: Orson Zhai, Baolin Wang, Chunyan Zhang, Felix Gu; +Cc: linux-spi, linux-kernel
On Fri, 09 Jan 2026 20:49:53 +0800, Felix Gu wrote:
> The driver currently uses spi_alloc_host() to allocate the controller
> but registers it using devm_spi_register_controller().
>
> If devm_register_restart_handler() fails, the code jumps to the
> put_ctlr label and calls spi_controller_put(). However, since the
> controller was registered via a devm function, the device core will
> automatically call spi_controller_put() again when the probe fails.
> This results in a double-free of the spi_controller structure.
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
Thanks!
[1/1] spi: spi-sprd-adi: Fix double free in probe error path
commit: 383d4f5cffcc8df930d95b06518a9d25a6d74aac
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
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path
2026-01-13 11:42 ` Mark Brown
@ 2026-01-13 19:20 ` Markus Elfring
2026-01-13 19:25 ` Mark Brown
0 siblings, 1 reply; 5+ messages in thread
From: Markus Elfring @ 2026-01-13 19:20 UTC (permalink / raw)
To: Mark Brown, Felix Gu, linux-spi
Cc: LKML, kernel-janitors, Baolin Wang, Chunyan Zhang, Orson Zhai
> [1/1] spi: spi-sprd-adi: Fix double free in probe error path
> commit: 383d4f5cffcc8df930d95b06518a9d25a6d74aac
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git/commit/?id=383d4f5cffcc8df930d95b06518a9d25a6d74aac
> 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.
See also once more:
Check “BAD_FIXES_TAG”
https://elixir.bootlin.com/linux/v6.19-rc4/source/scripts/checkpatch.pl#L3231-L3269
Regards,
Markus
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path
2026-01-13 19:20 ` Markus Elfring
@ 2026-01-13 19:25 ` Mark Brown
0 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2026-01-13 19:25 UTC (permalink / raw)
To: Markus Elfring
Cc: Felix Gu, linux-spi, LKML, kernel-janitors, Baolin Wang,
Chunyan Zhang, Orson Zhai
[-- Attachment #1: Type: text/plain, Size: 349 bytes --]
On Tue, Jan 13, 2026 at 08:20:29PM +0100, Markus Elfring wrote:
> See also once more:
> Check “BAD_FIXES_TAG”
> https://elixir.bootlin.com/linux/v6.19-rc4/source/scripts/checkpatch.pl#L3231-L3269
Feel free to ignore Markus, he has a long history of sending
unhelpful review comments and continues to ignore repeated requests
to stop.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-01-13 19:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-09 12:49 [PATCH v2] spi: spi-sprd-adi: Fix double free in probe error path Felix Gu
2026-01-09 17:40 ` Markus Elfring
2026-01-13 11:42 ` Mark Brown
2026-01-13 19:20 ` Markus Elfring
2026-01-13 19:25 ` Mark Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox