media: mtk-vcodec: Release device nodes in mtk_vcodec_init_enc_pm()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Sat, 20 Oct 2018 17:50:19 +0000 (13:50 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 12 Feb 2019 18:44:52 +0000 (19:44 +0100)
[ Upstream commit 8ea0f2ba0fa3f91ea1b8d823a54b042026ada6b3 ]

of_parse_phandle() returns the device node with refcount incremented.
There are two nodes that are used temporary in mtk_vcodec_init_enc_pm(),
but their refcounts are not decremented.

The patch adds one of_node_put() and fixes returning error codes.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c

index 3e73e9d..7c02504 100644 (file)
@@ -41,25 +41,27 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev)
        node = of_parse_phandle(dev->of_node, "mediatek,larb", 0);
        if (!node) {
                mtk_v4l2_err("no mediatek,larb found");
-               return -1;
+               return -ENODEV;
        }
        pdev = of_find_device_by_node(node);
+       of_node_put(node);
        if (!pdev) {
                mtk_v4l2_err("no mediatek,larb device found");
-               return -1;
+               return -ENODEV;
        }
        pm->larbvenc = &pdev->dev;
 
        node = of_parse_phandle(dev->of_node, "mediatek,larb", 1);
        if (!node) {
                mtk_v4l2_err("no mediatek,larb found");
-               return -1;
+               return -ENODEV;
        }
 
        pdev = of_find_device_by_node(node);
+       of_node_put(node);
        if (!pdev) {
                mtk_v4l2_err("no mediatek,larb device found");
-               return -1;
+               return -ENODEV;
        }
 
        pm->larbvenclt = &pdev->dev;