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>
Mon, 29 May 2023 14:17:28 +0000 (15:17 +0100)
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>
drivers/usb/dwc3/dwc3-qcom.c

index 167f851c8e592ca679aa6331ebbdc2ed5ffb9c43..82273581405001384311bebcc5ca7b66b26eee03 100644 (file)
@@ -791,6 +791,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;
@@ -842,9 +843,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;