1
0
mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2026-01-11 17:10:13 +00:00

iommu/amd: Fix pci_segment memleak in alloc_pci_segment()

Fix a memory leak of struct amd_iommu_pci_segment in alloc_pci_segment()
when system memory (or contiguous memory) is insufficient.

Fixes: 04230c119930 ("iommu/amd: Introduce per PCI segment device table")
Fixes: eda797a27795 ("iommu/amd: Introduce per PCI segment rlookup table")
Fixes: 99fc4ac3d297 ("iommu/amd: Introduce per PCI segment alias_table")
Cc: stable@vger.kernel.org
Signed-off-by: Jinhui Guo <guojinhui.liam@bytedance.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
Jinhui Guo 2025-10-28 00:50:17 +08:00 committed by Joerg Roedel
parent d1e281f832
commit 75ba146c26

View File

@ -1710,13 +1710,22 @@ static struct amd_iommu_pci_seg *__init alloc_pci_segment(u16 id,
list_add_tail(&pci_seg->list, &amd_iommu_pci_seg_list);
if (alloc_dev_table(pci_seg))
return NULL;
goto err_free_pci_seg;
if (alloc_alias_table(pci_seg))
return NULL;
goto err_free_dev_table;
if (alloc_rlookup_table(pci_seg))
return NULL;
goto err_free_alias_table;
return pci_seg;
err_free_alias_table:
free_alias_table(pci_seg);
err_free_dev_table:
free_dev_table(pci_seg);
err_free_pci_seg:
list_del(&pci_seg->list);
kfree(pci_seg);
return NULL;
}
static struct amd_iommu_pci_seg *__init get_pci_segment(u16 id,