[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