Skip to content

Commit f699774

Browse files
houlz0507bjorn-helgaas
authored andcommitted
PCI: of: Destroy changeset when adding PCI device node fails
Previously of_pci_make_dev_node() leaked a cset if it failed to create a device node for the PCI device with of_changeset_create_node(). Destroy the cset if of_changeset_create_node() fails. Fixes: 407d1a5 ("PCI: Create device tree node for bridge") Link: https://lore.kernel.org/r/1696007417-42059-1-git-send-email-lizhi.hou@amd.com Reported-by: Herve Codina <herve.codina@bootlin.com> Closes: https://lore.kernel.org/all/20230911171319.495bb837@bootlin.com/ Signed-off-by: Lizhi Hou <lizhi.hou@amd.com> [bhelgaas: commit log] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Herve Codina <herve.codina@bootlin.com>
1 parent 33efa29 commit f699774

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

drivers/pci/of.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -657,30 +657,33 @@ void of_pci_make_dev_node(struct pci_dev *pdev)
657657

658658
cset = kmalloc(sizeof(*cset), GFP_KERNEL);
659659
if (!cset)
660-
goto failed;
660+
goto out_free_name;
661661
of_changeset_init(cset);
662662

663663
np = of_changeset_create_node(cset, ppnode, name);
664664
if (!np)
665-
goto failed;
666-
np->data = cset;
665+
goto out_destroy_cset;
667666

668667
ret = of_pci_add_properties(pdev, cset, np);
669668
if (ret)
670-
goto failed;
669+
goto out_free_node;
671670

672671
ret = of_changeset_apply(cset);
673672
if (ret)
674-
goto failed;
673+
goto out_free_node;
675674

675+
np->data = cset;
676676
pdev->dev.of_node = np;
677677
kfree(name);
678678

679679
return;
680680

681-
failed:
682-
if (np)
683-
of_node_put(np);
681+
out_free_node:
682+
of_node_put(np);
683+
out_destroy_cset:
684+
of_changeset_destroy(cset);
685+
kfree(cset);
686+
out_free_name:
684687
kfree(name);
685688
}
686689
#endif

0 commit comments

Comments
 (0)