[PATCH] mtd: hyperbus: hbmc-am654: fix an OF node reference leak
Miquel Raynal
miquel.raynal at bootlin.com
Fri Dec 6 05:29:36 PST 2024
Hi Joe,
On 06/12/2024 at 20:47:40 +09, Joe Hattori <joe at pf.is.s.u-tokyo.ac.jp> wrote:
> In am654_hbmc_platform_driver, .remove() and the error path of .probe()
> do not decrement the refcount of an OF node obtained by
> of_get_next_child(). Fix this by adding of_node_put() calls.
>
> Fixes: aca31ce96814 ("mtd: hyperbus: hbmc-am654: Fix direct mapping setup flash access")
> Signed-off-by: Joe Hattori <joe at pf.is.s.u-tokyo.ac.jp>
> ---
> drivers/mtd/hyperbus/hbmc-am654.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/hyperbus/hbmc-am654.c b/drivers/mtd/hyperbus/hbmc-am654.c
> index 217f4e69233f..3e206bb34287 100644
> --- a/drivers/mtd/hyperbus/hbmc-am654.c
> +++ b/drivers/mtd/hyperbus/hbmc-am654.c
> @@ -174,18 +174,18 @@ static int am654_hbmc_probe(struct platform_device *pdev)
> priv->hbdev.np = of_get_next_child(np, NULL);
> ret = of_address_to_resource(priv->hbdev.np, 0, &res);
> if (ret)
> - return ret;
> + goto put_node;
>
> if (of_property_read_bool(dev->of_node, "mux-controls")) {
> struct mux_control *control = devm_mux_control_get(dev, NULL);
>
> if (IS_ERR(control))
> - return PTR_ERR(control);
> + goto put_node;
>
> ret = mux_control_select(control, 1);
> if (ret) {
> dev_err(dev, "Failed to select HBMC mux\n");
> - return ret;
> + goto put_node;
> }
> priv->mux_ctrl = control;
> }
> @@ -193,7 +193,7 @@ static int am654_hbmc_probe(struct platform_device *pdev)
> priv->hbdev.map.size = resource_size(&res);
> priv->hbdev.map.virt = devm_ioremap_resource(dev, &res);
> if (IS_ERR(priv->hbdev.map.virt))
> - return PTR_ERR(priv->hbdev.map.virt);
> + goto disable_mux;
This error path will return ret, whereas it should return
PTR_ERR(priv->hbdev.map.virt).
More information about the linux-mtd
mailing list