From: Andrew Cooper Date: Mon, 20 May 2019 10:14:01 +0000 (+0000) Subject: x86/pv: Fix error handling in dom0_construct_pv() X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~2178 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8207314d985f89ca6920066d1054be33c8419e78;p=xen.git x86/pv: Fix error handling in dom0_construct_pv() One path in dom0_construct_pv() returns -1 unlike all other error paths. Switch it to returning -EINVAL. This was last modified by c/s c84481fb XSA-55, but the bug predates that series. However, this patch did (for no obvious reason) introduce a bifurcated tail to the function with two subtly different elf_check_broken() clauses. As the elf_check_broken() is just a warning and doesn't influence the further boot, fold the exit paths together and use a single clause. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c index cef2d42254..064a10ed1f 100644 --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -735,7 +735,7 @@ int __init dom0_construct_pv(struct domain *d, mapcache_override_current(NULL); switch_cr3_cr4(current->arch.cr3, read_cr4()); printk("Invalid HYPERCALL_PAGE field in ELF notes.\n"); - rc = -1; + rc = -EINVAL; goto out; } hypercall_page_initialise( @@ -903,21 +903,15 @@ int __init dom0_construct_pv(struct domain *d, rc = dom0_setup_permissions(d); BUG_ON(rc != 0); - if ( elf_check_broken(&elf) ) - printk(" Xen warning: dom0 kernel broken ELF: %s\n", - elf_check_broken(&elf)); - if ( d->domain_id == hardware_domid ) iommu_hwdom_init(d); v->is_initialised = 1; clear_bit(_VPF_down, &v->pause_flags); - return 0; - out: if ( elf_check_broken(&elf) ) - printk(" Xen dom0 kernel broken ELF: %s\n", + printk(XENLOG_WARNING "Dom0 kernel broken ELF: %s\n", elf_check_broken(&elf)); return rc;