All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@linaro.org>
To: Zhe Qiao <qiaozhe@iscas.ac.cn>
Cc: linux-acpi@vger.kernel.org
Subject: [bug report] PCI/ACPI: Fix allocated memory release on error in pci_acpi_scan_root()
Date: Wed, 11 Jun 2025 18:15:42 +0300	[thread overview]
Message-ID: <aEmdnuw715btq7Q5@stanley.mountain> (raw)

Hello Zhe Qiao,

Commit 631b2af2f357 ("PCI/ACPI: Fix allocated memory release on error
in pci_acpi_scan_root()") from Apr 30, 2025 (linux-next), leads to
the following Smatch static checker warning:

	drivers/pci/pci-acpi.c:1712 pci_acpi_scan_root()
	error: double free of 'root_ops' (line 1711)

drivers/pci/pci-acpi.c
    1667 struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
    1668 {
    1669         struct acpi_pci_generic_root_info *ri;
    1670         struct pci_bus *bus, *child;
    1671         struct acpi_pci_root_ops *root_ops;
    1672         struct pci_host_bridge *host;
    1673 
    1674         ri = kzalloc(sizeof(*ri), GFP_KERNEL);
    1675         if (!ri)
    1676                 return NULL;
    1677 
    1678         root_ops = kzalloc(sizeof(*root_ops), GFP_KERNEL);
    1679         if (!root_ops)
    1680                 goto free_ri;
    1681 
    1682         ri->cfg = pci_acpi_setup_ecam_mapping(root);
    1683         if (!ri->cfg)
    1684                 goto free_root_ops;
    1685 
    1686         root_ops->release_info = pci_acpi_generic_release_info;
    1687         root_ops->prepare_resources = pci_acpi_root_prepare_resources;
    1688         root_ops->pci_ops = (struct pci_ops *)&ri->cfg->ops->pci_ops;
    1689         bus = acpi_pci_root_create(root, root_ops, &ri->common, ri->cfg);
    1690         if (!bus)
    1691                 goto free_cfg;

The acpi_pci_root_create() function frees root_ops on error in
pci_acpi_generic_release_info().  I think there is only one error
path where it frees "ri->cfg".  I probably would advise you to re-write
the the error handling in acpi_pci_root_create().

    1692 
    1693         /* If we must preserve the resource configuration, claim now */
    1694         host = pci_find_host_bridge(bus);
    1695         if (host->preserve_config)
    1696                 pci_bus_claim_resources(bus);
    1697 
    1698         /*
    1699          * Assign whatever was left unassigned. If we didn't claim above,
    1700          * this will reassign everything.
    1701          */
    1702         pci_assign_unassigned_root_bus_resources(bus);
    1703 
    1704         list_for_each_entry(child, &bus->children, node)
    1705                 pcie_bus_configure_settings(child);
    1706 
    1707         return bus;
    1708 
    1709 free_cfg:
    1710         pci_ecam_free(ri->cfg);
    1711 free_root_ops:
--> 1712         kfree(root_ops);
    1713 free_ri:
    1714         kfree(ri);
    1715         return NULL;
    1716 }

regards,
dan carpenter

             reply	other threads:[~2025-06-11 15:15 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-11 15:15 Dan Carpenter [this message]
2025-06-12  5:12 ` [bug report] PCI/ACPI: Fix allocated memory release on error in pci_acpi_scan_root() Zhe Qiao
2025-06-12  7:34   ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aEmdnuw715btq7Q5@stanley.mountain \
    --to=dan.carpenter@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=qiaozhe@iscas.ac.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.