[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/2] x86: fix memory leak in pvh_setup_acpi_xsdt
Switch to use goto style error handling to avoid leaking xsdt. Coverity-ID: 1401535 Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/arch/x86/domain_build.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 1f18f9283f..d74296509a 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -2459,7 +2459,8 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, if ( !xsdt ) { printk("Unable to allocate memory for XSDT table\n"); - return -ENOMEM; + rc = -ENOMEM; + goto out; } /* Copy the native XSDT table header. */ @@ -2467,7 +2468,8 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, if ( !rsdp ) { printk("Unable to map RSDP\n"); - return -EINVAL; + rc = -EINVAL; + goto out; } xsdt_paddr = rsdp->xsdt_physical_address; acpi_os_unmap_memory(rsdp, sizeof(*rsdp)); @@ -2475,7 +2477,8 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, if ( !table ) { printk("Unable to map XSDT\n"); - return -EINVAL; + rc = -EINVAL; + goto out; } xsdt->header = *table; acpi_os_unmap_memory(table, sizeof(*table)); @@ -2505,7 +2508,8 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, if ( pvh_steal_ram(d, size, 0, GB(4), addr) ) { printk("Unable to find guest RAM for XSDT\n"); - return -ENOMEM; + rc = -ENOMEM; + goto out; } /* Mark this region as E820_ACPI. */ @@ -2516,11 +2520,15 @@ static int __init pvh_setup_acpi_xsdt(struct domain *d, paddr_t madt_addr, if ( rc ) { printk("Unable to copy XSDT into guest memory\n"); - return rc; + goto out; } + + rc = 0; + + out: xfree(xsdt); - return 0; + return rc; } static int __init pvh_setup_acpi(struct domain *d, paddr_t start_info) -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |