Unverified Commit ef3d549e authored by Felix Gu's avatar Felix Gu Committed by Mark Brown
Browse files

spi: sn-f-ospi: Fix resource leak in f_ospi_probe()



In f_ospi_probe(), when num_cs validation fails, it returns without
calling spi_controller_put() on the SPI controller, which causes a
resource leak.

Use devm_spi_alloc_host() instead of spi_alloc_host() to ensure the
SPI controller is properly freed when probe fails.

Fixes: 1b74dd64 ("spi: Add Socionext F_OSPI SPI flash controller driver")
Signed-off-by: default avatarFelix Gu <ustc.gu@gmail.com>
Link: https://patch.msgid.link/20260319-sn-f-v1-1-33a6738d2da8@gmail.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent c3692998
Loading
Loading
Loading
Loading
+5 −12
Original line number Diff line number Diff line
@@ -612,7 +612,7 @@ static int f_ospi_probe(struct platform_device *pdev)
	u32 num_cs = OSPI_NUM_CS;
	int ret;

	ctlr = spi_alloc_host(dev, sizeof(*ospi));
	ctlr = devm_spi_alloc_host(dev, sizeof(*ospi));
	if (!ctlr)
		return -ENOMEM;

@@ -635,16 +635,12 @@ static int f_ospi_probe(struct platform_device *pdev)
	platform_set_drvdata(pdev, ospi);

	ospi->base = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(ospi->base)) {
		ret = PTR_ERR(ospi->base);
		goto err_put_ctlr;
	}
	if (IS_ERR(ospi->base))
		return PTR_ERR(ospi->base);

	ospi->clk = devm_clk_get_enabled(dev, NULL);
	if (IS_ERR(ospi->clk)) {
		ret = PTR_ERR(ospi->clk);
		goto err_put_ctlr;
	}
	if (IS_ERR(ospi->clk))
		return PTR_ERR(ospi->clk);

	mutex_init(&ospi->mlock);

@@ -661,9 +657,6 @@ static int f_ospi_probe(struct platform_device *pdev)
err_destroy_mutex:
	mutex_destroy(&ospi->mlock);

err_put_ctlr:
	spi_controller_put(ctlr);

	return ret;
}