[PATCH] ACPI: pci: Release excess memory usage.

Zhe Qiao posted 1 patch 9 months, 2 weeks ago
drivers/pci/pci-acpi.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
[PATCH] ACPI: pci: Release excess memory usage.
Posted by Zhe Qiao 9 months, 2 weeks ago
In the pci_acpi_scan_root() function, if the PCI bus creation fails,
the allocated memory should be released to avoid memory occupation.

Signed-off-by: Zhe Qiao <qiaozhe@iscas.ac.cn>
---
 drivers/pci/pci-acpi.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index af370628e583..b008dbed7077 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -1683,9 +1683,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 
 	ri->cfg = pci_acpi_setup_ecam_mapping(root);
 	if (!ri->cfg) {
-		kfree(ri);
-		kfree(root_ops);
-		return NULL;
+		goto cleanup_exit;
 	}
 
 	root_ops->release_info = pci_acpi_generic_release_info;
@@ -1693,7 +1691,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 	root_ops->pci_ops = (struct pci_ops *)&ri->cfg->ops->pci_ops;
 	bus = acpi_pci_root_create(root, root_ops, &ri->common, ri->cfg);
 	if (!bus)
-		return NULL;
+		goto cleanup_exit;
 
 	/* If we must preserve the resource configuration, claim now */
 	host = pci_find_host_bridge(bus);
@@ -1710,6 +1708,11 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
 		pcie_bus_configure_settings(child);
 
 	return bus;
+
+cleanup_exit:
+	kfree(root_ops);
+	kfree(ri);
+	return NULL;
 }
 
 void pcibios_add_bus(struct pci_bus *bus)
-- 
2.43.0
Re: [PATCH] ACPI: pci: Release excess memory usage
Posted by Markus Elfring 9 months, 2 weeks ago
> In the pci_acpi_scan_root() function, if the PCI bus creation fails,

                                                                failed?


> the allocated memory should be released to avoid memory occupation.

Do you propose to complete the exception handling?

How do you think about to add any tags (like “Fixes” and “Cc”) accordingly?
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.15-rc4#n145

See also:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.15-rc4#n94


…
> +++ b/drivers/pci/pci-acpi.c
…
> @@ -1710,6 +1708,11 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
>  		pcie_bus_configure_settings(child);
>  
>  	return bus;
> +
> +cleanup_exit:

How do you think about to use the label “free_root_ops”?


> +	kfree(root_ops);

I suggest to use another label “free_ri” so that a bit of duplicate exception handling code
can be avoided from a previous if branch.


> +	kfree(ri);
> +	return NULL;
>  }
…

How do you think about to benefit any more from the application of the attribute “__free”?
https://elixir.bootlin.com/linux/v6.15-rc4/source/include/linux/slab.h#L476

Regards,
Markus