diff options
author | Ian Jackson <ian.jackson@eu.citrix.com> | 2013-06-14 16:43:17 +0100 |
---|---|---|
committer | Ian Jackson <Ian.Jackson@eu.citrix.com> | 2013-06-14 16:43:17 +0100 |
commit | a965b8f80388603d439ae2b8ee7b9b018a079f90 (patch) | |
tree | 3797575d6bc85454c828e9a5550da4d31adcfc71 /tools/libxc/xc_hvm_build_x86.c | |
parent | d0790bdad7496e720416b2d4a04563c4c27e7b95 (diff) | |
download | xen-a965b8f80388603d439ae2b8ee7b9b018a079f90.tar.gz xen-a965b8f80388603d439ae2b8ee7b9b018a079f90.tar.bz2 xen-a965b8f80388603d439ae2b8ee7b9b018a079f90.zip |
libelf: Make all callers call elf_check_broken
This arranges that if the new pointer reference error checking
tripped, we actually get a message about it. In this patch these
messages do not change the actual return values from the various
functions: so pointer reference errors do not prevent loading. This
is for fear that some existing kernels might cause the code to make
these wild references, which would then break, which is not a good
thing in a security patch.
In xen/arch/x86/domain_build.c we have to introduce an "out" label and
change all of the "return rc" beyond the relevant point into "goto
out".
Difference in the 4.2 series, compared to unstable:
* tools/libxc/xc_hvm_build_x86.c:setup_guest and
xen/arch/arm/kernel.c:kernel_try_elf_prepare have different
error handling in 4.2 to unstable; patch adjusted accordingly.
This is part of the fix to a security issue, XSA-55.
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
xen-unstable version Reviewed-by: George Dunlap <george.dunlap@eu.citrix.com>
Diffstat (limited to 'tools/libxc/xc_hvm_build_x86.c')
-rw-r--r-- | tools/libxc/xc_hvm_build_x86.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/tools/libxc/xc_hvm_build_x86.c b/tools/libxc/xc_hvm_build_x86.c index ccfd8b5458..8165287a9a 100644 --- a/tools/libxc/xc_hvm_build_x86.c +++ b/tools/libxc/xc_hvm_build_x86.c @@ -403,11 +403,16 @@ static int setup_guest(xc_interface *xch, munmap(page0, PAGE_SIZE); } + if ( elf_check_broken(&elf) ) + ERROR("HVM ELF broken: %s", elf_check_broken(&elf)); + free(page_array); return 0; error_out: free(page_array); + if ( elf_check_broken(&elf) ) + ERROR("HVM ELF broken, failing: %s", elf_check_broken(&elf)); return -1; } |