diff options
| author | Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp> | 2024-11-04 19:01:19 +0900 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-12-09 10:33:03 +0100 |
| commit | 5262cbf40264a22ea96b0123a963c654a30f1f15 (patch) | |
| tree | bf9749e50fca03c07925885b0734fb35c3d3cddc /drivers | |
| parent | a2ed3b780f34e4a6403064208bc2c99d1ed85026 (diff) | |
| download | linux-5262cbf40264a22ea96b0123a963c654a30f1f15.tar.gz linux-5262cbf40264a22ea96b0123a963c654a30f1f15.tar.bz2 linux-5262cbf40264a22ea96b0123a963c654a30f1f15.zip | |
media: platform: exynos4-is: Fix an OF node reference leak in fimc_md_is_isp_available
commit 8964eb23408243ae0016d1f8473c76f64ff25d20 upstream.
In fimc_md_is_isp_available(), of_get_child_by_name() is called to check
if FIMC-IS is available. Current code does not decrement the refcount of
the returned device node, which causes an OF node reference leak. Fix it
by calling of_node_put() at the end of the variable scope.
Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Fixes: e781bbe3fecf ("[media] exynos4-is: Add fimc-is subdevs registration")
Cc: stable@vger.kernel.org
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
[hverkuil: added CC to stable]
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/media/platform/samsung/exynos4-is/media-dev.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/media/platform/samsung/exynos4-is/media-dev.h b/drivers/media/platform/samsung/exynos4-is/media-dev.h index 786264cf79dc..a50e58ab7ef7 100644 --- a/drivers/media/platform/samsung/exynos4-is/media-dev.h +++ b/drivers/media/platform/samsung/exynos4-is/media-dev.h @@ -178,8 +178,9 @@ int fimc_md_set_camclk(struct v4l2_subdev *sd, bool on); #ifdef CONFIG_OF static inline bool fimc_md_is_isp_available(struct device_node *node) { - node = of_get_child_by_name(node, FIMC_IS_OF_NODE_NAME); - return node ? of_device_is_available(node) : false; + struct device_node *child __free(device_node) = + of_get_child_by_name(node, FIMC_IS_OF_NODE_NAME); + return child ? of_device_is_available(child) : false; } #else #define fimc_md_is_isp_available(node) (false) |
