usb: dwc3: qcom: Fix potential memory leak
authorVladislav Efanov <VEfanov@ispras.ru>
Wed, 17 May 2023 17:25:18 +0000 (20:25 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:21:52 +0000 (16:21 +0200)
[ Upstream commit 097fb3ee710d4de83b8d4f5589e8ee13e0f0541e ]

Function dwc3_qcom_probe() allocates memory for resource structure
which is pointed by parent_res pointer. This memory is not
freed. This leads to memory leak. Use stack memory to prevent
memory leak.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 2bc02355f8ba ("usb: dwc3: qcom: Add support for booting with ACPI")
Signed-off-by: Vladislav Efanov <VEfanov@ispras.ru>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Link: https://lore.kernel.org/r/20230517172518.442591-1-VEfanov@ispras.ru
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/dwc3/dwc3-qcom.c

index 79b22ab..4822601 100644 (file)
@@ -800,6 +800,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
        struct device           *dev = &pdev->dev;
        struct dwc3_qcom        *qcom;
        struct resource         *res, *parent_res = NULL;
+       struct resource         local_res;
        int                     ret, i;
        bool                    ignore_pipe_clk;
        bool                    wakeup_source;
@@ -851,9 +852,8 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
        if (np) {
                parent_res = res;
        } else {
-               parent_res = kmemdup(res, sizeof(struct resource), GFP_KERNEL);
-               if (!parent_res)
-                       return -ENOMEM;
+               memcpy(&local_res, res, sizeof(struct resource));
+               parent_res = &local_res;
 
                parent_res->start = res->start +
                        qcom->acpi_pdata->qscratch_base_offset;