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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Nov 2022 08:58:21 +0000 (09:58 +0100)
[ Upstream commit d38a648d2d6cc7bee11c6f533ff9426a00c2a74c ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wwan/iosm/iosm_ipc_pcie.c

index 2fe88b8..01df238 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,