On Tue Dec 24 12:54:11 2024 +0900, Joe Hattori wrote:
> imx_media_add_of_subdevs() calls of_parse_phandle() and passes the
> obtained node to imx_media_of_add_csi(). The passed node is used in
> v4l2_async_nf_add_fwnode(), which increments the refcount of the node.
> Therefore, while the current implementation only releases the node when
> imx_media_of_add_csi() fails, but should always release it. Call
> of_node_put() right after imx_media_of_add_csi().
> 
> Fixes: dee747f88167 ("media: imx: Don't register IPU subdevs/links if CSI 
> port missing")
> Signed-off-by: Joe Hattori <j...@pf.is.s.u-tokyo.ac.jp>
> Reviewed-by: Vladimir Zapolskiy <vladimir.zapols...@linaro.org>
> Reviewed-by: Philipp Zabel <p.za...@pengutronix.de>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>

Patch committed.

Thanks,
Hans Verkuil

 drivers/staging/media/imx/imx-media-of.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

---

diff --git a/drivers/staging/media/imx/imx-media-of.c 
b/drivers/staging/media/imx/imx-media-of.c
index 118bff988bc7..bb28daa4d713 100644
--- a/drivers/staging/media/imx/imx-media-of.c
+++ b/drivers/staging/media/imx/imx-media-of.c
@@ -54,22 +54,18 @@ int imx_media_add_of_subdevs(struct imx_media_dev *imxmd,
                        break;
 
                ret = imx_media_of_add_csi(imxmd, csi_np);
+               of_node_put(csi_np);
                if (ret) {
                        /* unavailable or already added is not an error */
                        if (ret == -ENODEV || ret == -EEXIST) {
-                               of_node_put(csi_np);
                                continue;
                        }
 
                        /* other error, can't continue */
-                       goto err_out;
+                       return ret;
                }
        }
 
        return 0;
-
-err_out:
-       of_node_put(csi_np);
-       return ret;
 }
 EXPORT_SYMBOL_GPL(imx_media_add_of_subdevs);

Reply via email to