[PATCH] spi: fix resource leaks on device setup failure

From: Johan Hovold

Date: Tue Mar 24 2026 - 06:36:43 EST


Make sure to call controller cleanup() on late device setup failures to
avoid leaking resources allocated by setup().

Fixes: c7299fea6769 ("spi: Fix spi device unregister flow")
Cc: stable@xxxxxxxxxxxxxxx # 5.13
Cc: Saravana Kannan <saravanak@xxxxxxxxxx>
Signed-off-by: Johan Hovold <johan@xxxxxxxxxx>
---
drivers/spi/spi.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 9fe9f99183bf..cb00619864cf 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -4091,7 +4091,7 @@ int spi_setup(struct spi_device *spi)
status = spi_set_cs_timing(spi);
if (status) {
mutex_unlock(&spi->controller->io_mutex);
- return status;
+ goto err_cleanup;
}

if (spi->controller->auto_runtime_pm && spi->controller->set_cs) {
@@ -4100,7 +4100,7 @@ int spi_setup(struct spi_device *spi)
mutex_unlock(&spi->controller->io_mutex);
dev_err(&spi->controller->dev, "Failed to power device: %d\n",
status);
- return status;
+ goto err_cleanup;
}

/*
@@ -4136,6 +4136,12 @@ int spi_setup(struct spi_device *spi)
status);

return status;
+
+err_cleanup:
+ if (spi->controller->cleanup)
+ spi->controller->cleanup(spi);
+
+ return status;
}
EXPORT_SYMBOL_GPL(spi_setup);

--
2.52.0