mirror of
https://github.com/torvalds/linux.git
synced 2026-06-06 05:27:07 +02:00
spi: amlogic-spisg: Fix memory leak in aml_spisg_probe()
In aml_spisg_probe(), ctlr is allocated by
spi_alloc_target()/spi_alloc_host(), but fails to call
spi_controller_put() in several error paths. This leads
to a memory leak whenever the driver fails to probe after
the initial allocation.
Convert to use devm_spi_alloc_host()/devm_spi_alloc_target()
to fix the memory leak.
Fixes: cef9991e04 ("spi: Add Amlogic SPISG driver")
Signed-off-by: Felix Gu <ustc.gu@gmail.com>
Link: https://patch.msgid.link/20260308-spisg-v1-1-2cace5cafc24@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a00da54d06
commit
b8db955299
|
|
@ -729,9 +729,9 @@ static int aml_spisg_probe(struct platform_device *pdev)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (of_property_read_bool(dev->of_node, "spi-slave"))
|
if (of_property_read_bool(dev->of_node, "spi-slave"))
|
||||||
ctlr = spi_alloc_target(dev, sizeof(*spisg));
|
ctlr = devm_spi_alloc_target(dev, sizeof(*spisg));
|
||||||
else
|
else
|
||||||
ctlr = spi_alloc_host(dev, sizeof(*spisg));
|
ctlr = devm_spi_alloc_host(dev, sizeof(*spisg));
|
||||||
if (!ctlr)
|
if (!ctlr)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
@ -750,10 +750,8 @@ static int aml_spisg_probe(struct platform_device *pdev)
|
||||||
return dev_err_probe(dev, PTR_ERR(spisg->map), "regmap init failed\n");
|
return dev_err_probe(dev, PTR_ERR(spisg->map), "regmap init failed\n");
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (irq < 0) {
|
if (irq < 0)
|
||||||
ret = irq;
|
return irq;
|
||||||
goto out_controller;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = device_reset_optional(dev);
|
ret = device_reset_optional(dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
@ -817,8 +815,6 @@ static int aml_spisg_probe(struct platform_device *pdev)
|
||||||
if (spisg->core)
|
if (spisg->core)
|
||||||
clk_disable_unprepare(spisg->core);
|
clk_disable_unprepare(spisg->core);
|
||||||
clk_disable_unprepare(spisg->pclk);
|
clk_disable_unprepare(spisg->pclk);
|
||||||
out_controller:
|
|
||||||
spi_controller_put(ctlr);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user