* [PATCH 0/2] spi: fix resource leaks on device setup failure
@ 2026-04-10 15:49 Johan Hovold
2026-04-10 15:49 ` [PATCH 1/2] " Johan Hovold
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Johan Hovold @ 2026-04-10 15:49 UTC (permalink / raw)
To: Mark Brown; +Cc: Saravana Kannan, linux-spi, linux-kernel, Johan Hovold
Make sure to call controller cleanup() if spi_setup() fails while
registering a device to avoid leaking any resources allocated by
setup().
Johan
Changes in v2:
- only call cleanup() if spi_setup() fails during registration
- use spi_cleanup() helper
- fix controller cleanup() documentation (new patch)
Johan Hovold (2):
spi: fix resource leaks on device setup failure
spi: fix controller cleanup() documentation
drivers/spi/spi.c | 61 +++++++++++++++++++++++++----------------
include/linux/spi/spi.h | 2 +-
2 files changed, 38 insertions(+), 25 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/2] spi: fix resource leaks on device setup failure 2026-04-10 15:49 [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold @ 2026-04-10 15:49 ` Johan Hovold 2026-04-10 15:49 ` [PATCH 2/2] spi: fix controller cleanup() documentation Johan Hovold ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: Johan Hovold @ 2026-04-10 15:49 UTC (permalink / raw) To: Mark Brown; +Cc: Saravana Kannan, linux-spi, linux-kernel, Johan Hovold, stable Make sure to call controller cleanup() if spi_setup() fails while registering a device to avoid leaking any resources allocated by setup(). Fixes: c7299fea6769 ("spi: Fix spi device unregister flow") Cc: stable@vger.kernel.org # 5.13 Cc: Saravana Kannan <saravanak@kernel.org> Signed-off-by: Johan Hovold <johan@kernel.org> --- drivers/spi/spi.c | 61 ++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 272b45d6b5aa..c14f29457c29 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -43,6 +43,8 @@ EXPORT_TRACEPOINT_SYMBOL(spi_transfer_stop); #include "internals.h" +static int __spi_setup(struct spi_device *spi, bool initial_setup); + static DEFINE_IDR(spi_controller_idr); static void spidev_release(struct device *dev) @@ -726,7 +728,7 @@ static int __spi_add_device(struct spi_device *spi) * normally rely on the device being setup. Devices * using SPI_CS_HIGH can't coexist well otherwise... */ - status = spi_setup(spi); + status = __spi_setup(spi, true); if (status < 0) { dev_err(dev, "can't setup %s, status %d\n", dev_name(&spi->dev), status); @@ -3992,27 +3994,7 @@ static int spi_set_cs_timing(struct spi_device *spi) return status; } -/** - * spi_setup - setup SPI mode and clock rate - * @spi: the device whose settings are being modified - * Context: can sleep, and no requests are queued to the device - * - * SPI protocol drivers may need to update the transfer mode if the - * device doesn't work with its default. They may likewise need - * to update clock rates or word sizes from initial values. This function - * changes those settings, and must be called from a context that can sleep. - * Except for SPI_CS_HIGH, which takes effect immediately, the changes take - * effect the next time the device is selected and data is transferred to - * or from it. When this function returns, the SPI device is deselected. - * - * Note that this call will fail if the protocol driver specifies an option - * that the underlying controller or its driver does not support. For - * example, not all hardware supports wire transfers using nine bit words, - * LSB-first wire encoding, or active-high chipselects. - * - * Return: zero on success, else a negative error code. - */ -int spi_setup(struct spi_device *spi) +static int __spi_setup(struct spi_device *spi, bool initial_setup) { unsigned bad_bits, ugly_bits; int status; @@ -4097,7 +4079,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) { @@ -4106,7 +4088,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; } /* @@ -4142,6 +4124,37 @@ int spi_setup(struct spi_device *spi) status); return status; + +err_cleanup: + if (initial_setup) + spi_cleanup(spi); + + return status; +} + +/** + * spi_setup - setup SPI mode and clock rate + * @spi: the device whose settings are being modified + * Context: can sleep, and no requests are queued to the device + * + * SPI protocol drivers may need to update the transfer mode if the + * device doesn't work with its default. They may likewise need + * to update clock rates or word sizes from initial values. This function + * changes those settings, and must be called from a context that can sleep. + * Except for SPI_CS_HIGH, which takes effect immediately, the changes take + * effect the next time the device is selected and data is transferred to + * or from it. When this function returns, the SPI device is deselected. + * + * Note that this call will fail if the protocol driver specifies an option + * that the underlying controller or its driver does not support. For + * example, not all hardware supports wire transfers using nine bit words, + * LSB-first wire encoding, or active-high chipselects. + * + * Return: zero on success, else a negative error code. + */ +int spi_setup(struct spi_device *spi) +{ + return __spi_setup(spi, false); } EXPORT_SYMBOL_GPL(spi_setup); -- 2.52.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] spi: fix controller cleanup() documentation 2026-04-10 15:49 [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold 2026-04-10 15:49 ` [PATCH 1/2] " Johan Hovold @ 2026-04-10 15:49 ` Johan Hovold 2026-04-10 15:51 ` [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold 2026-04-22 14:10 ` Mark Brown 3 siblings, 0 replies; 5+ messages in thread From: Johan Hovold @ 2026-04-10 15:49 UTC (permalink / raw) To: Mark Brown; +Cc: Saravana Kannan, linux-spi, linux-kernel, Johan Hovold The controller cleanup() callback is no longer called when releasing a device, but rather when deregistering it (and on registration failures). Fixes: c7299fea6769 ("spi: Fix spi device unregister flow") Cc: Saravana Kannan <saravanak@kernel.org> Signed-off-by: Johan Hovold <johan@kernel.org> --- include/linux/spi/spi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 0dc671c07d3a..0de636484f3d 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h @@ -700,7 +700,7 @@ struct spi_controller { int (*transfer)(struct spi_device *spi, struct spi_message *mesg); - /* Called on release() to free memory provided by spi_controller */ + /* Called on deregistration to free memory provided by spi_controller */ void (*cleanup)(struct spi_device *spi); /* -- 2.52.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] spi: fix resource leaks on device setup failure 2026-04-10 15:49 [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold 2026-04-10 15:49 ` [PATCH 1/2] " Johan Hovold 2026-04-10 15:49 ` [PATCH 2/2] spi: fix controller cleanup() documentation Johan Hovold @ 2026-04-10 15:51 ` Johan Hovold 2026-04-22 14:10 ` Mark Brown 3 siblings, 0 replies; 5+ messages in thread From: Johan Hovold @ 2026-04-10 15:51 UTC (permalink / raw) To: Mark Brown; +Cc: Saravana Kannan, linux-spi, linux-kernel On Fri, Apr 10, 2026 at 05:49:05PM +0200, Johan Hovold wrote: > Make sure to call controller cleanup() if spi_setup() fails while > registering a device to avoid leaking any resources allocated by > setup(). > Changes in v2: > - only call cleanup() if spi_setup() fails during registration > - use spi_cleanup() helper > - fix controller cleanup() documentation (new patch) Bah, I missed to add "v2" to Subject. Let me know if you prefer me to send a v3... Johan ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] spi: fix resource leaks on device setup failure 2026-04-10 15:49 [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold ` (2 preceding siblings ...) 2026-04-10 15:51 ` [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold @ 2026-04-22 14:10 ` Mark Brown 3 siblings, 0 replies; 5+ messages in thread From: Mark Brown @ 2026-04-22 14:10 UTC (permalink / raw) To: Johan Hovold; +Cc: Saravana Kannan, linux-spi, linux-kernel On Fri, 10 Apr 2026 17:49:05 +0200, Johan Hovold wrote: > spi: fix resource leaks on device setup failure > > Make sure to call controller cleanup() if spi_setup() fails while > registering a device to avoid leaking any resources allocated by > setup(). > > Johan > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-7.1 Thanks! [1/2] spi: fix resource leaks on device setup failure https://git.kernel.org/broonie/spi/c/db357034f7e0 [2/2] spi: fix controller cleanup() documentation https://git.kernel.org/broonie/spi/c/a6e23843e949 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
end of thread, other threads:[~2026-04-22 19:57 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-10 15:49 [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold 2026-04-10 15:49 ` [PATCH 1/2] " Johan Hovold 2026-04-10 15:49 ` [PATCH 2/2] spi: fix controller cleanup() documentation Johan Hovold 2026-04-10 15:51 ` [PATCH 0/2] spi: fix resource leaks on device setup failure Johan Hovold 2026-04-22 14:10 ` Mark Brown
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.