Message ID | 20241224035411.2220404-1-joe@pf.is.s.u-tokyo.ac.jp (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | staging: media: imx: fix OF node leak in imx_media_add_of_subdevs() | expand |
On 12/24/24 05:54, 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 <joe@pf.is.s.u-tokyo.ac.jp> > --- > 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); Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> -- Best wishes, Vladimir
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);
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 <joe@pf.is.s.u-tokyo.ac.jp> --- drivers/staging/media/imx/imx-media-of.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)