net: wwan: iosm: fix memory leak in ipc_pcie_read_bios_cfg
authorM Chetan Kumar <m.chetan.kumar@linux.intel.com>
Mon, 7 Nov 2022 07:34:49 +0000 (13:04 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Nov 2022 14:00:25 +0000 (14:00 +0000)
ipc_pcie_read_bios_cfg() is using the acpi_evaluate_dsm() to
obtain the wwan power state configuration from BIOS but is
not freeing the acpi_object. The acpi_evaluate_dsm() returned
acpi_object to be freed.

Free the acpi_object after use.

Fixes: 7e98d785ae61 ("net: iosm: entry point")
Signed-off-by: M Chetan Kumar <m.chetan.kumar@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/wwan/iosm/iosm_ipc_pcie.c

index 31f57b9..97cb684 100644 (file)
@@ -232,6 +232,7 @@ static void ipc_pcie_config_init(struct iosm_pcie *ipc_pcie)
  */
 static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev)
 {
+       enum ipc_pcie_sleep_state sleep_state = IPC_PCIE_D0L12;
        union acpi_object *object;
        acpi_handle handle_acpi;
 
@@ -242,12 +243,16 @@ static enum ipc_pcie_sleep_state ipc_pcie_read_bios_cfg(struct device *dev)
        }
 
        object = acpi_evaluate_dsm(handle_acpi, &wwan_acpi_guid, 0, 3, NULL);
+       if (!object)
+               goto default_ret;
+
+       if (object->integer.value == 3)
+               sleep_state = IPC_PCIE_D3L2;
 
-       if (object && object->integer.value == 3)
-               return IPC_PCIE_D3L2;
+       kfree(object);
 
 default_ret:
-       return IPC_PCIE_D0L12;
+       return sleep_state;
 }
 
 static int ipc_pcie_probe(struct pci_dev *pci,