Commit bf582190 authored by Joe Hattori's avatar Joe Hattori Committed by Miquel Raynal
Browse files

mtd: hyperbus: hbmc-am654: fix an OF node reference leak



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: aca31ce9 ("mtd: hyperbus: hbmc-am654: Fix direct mapping setup flash access")
Signed-off-by: default avatarJoe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
parent 02ba194f
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -174,26 +174,30 @@ 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);
		if (IS_ERR(control)) {
			ret = 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;
	}

	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);
	if (IS_ERR(priv->hbdev.map.virt)) {
		ret = PTR_ERR(priv->hbdev.map.virt);
		goto disable_mux;
	}

	priv->ctlr.dev = dev;
	priv->ctlr.ops = &am654_hbmc_ops;
@@ -226,6 +230,8 @@ static int am654_hbmc_probe(struct platform_device *pdev)
disable_mux:
	if (priv->mux_ctrl)
		mux_control_deselect(priv->mux_ctrl);
put_node:
	of_node_put(priv->hbdev.np);
	return ret;
}

@@ -241,6 +247,7 @@ static void am654_hbmc_remove(struct platform_device *pdev)

	if (dev_priv->rx_chan)
		dma_release_channel(dev_priv->rx_chan);
	of_node_put(priv->hbdev.np);
}

static const struct of_device_id am654_hbmc_dt_ids[] = {