[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] libelf: allow having HYPERCALL_PAGE entry before VIRT_BASE in __xen_guest section
commit f2613bd7f203a79abde270d9fa54b4add8dd911b Author: Gregory Herrero <gregory.herrero@xxxxxxxxxx> AuthorDate: Mon Dec 4 11:01:48 2017 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Mon Dec 4 11:01:48 2017 +0100 libelf: allow having HYPERCALL_PAGE entry before VIRT_BASE in __xen_guest section When filling __xen_guest section of a guest, user may define HYPERCALL_PAGE earlier than VIRT_BASE in the section leading to an incorrect hypercall page address since an undefined virt_base could be used to compute hypercall page address. If there is no VIRT_BASE entry in __xen_guest section, default value of 0 is used for virt_base. Thus, setting hypercall page address to HYPERCALL_PAGE value is correct in this case too. Signed-off-by: Gregory Herrero <gregory.herrero@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/common/libelf/libelf-dominfo.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c index a52900c..829d517 100644 --- a/xen/common/libelf/libelf-dominfo.c +++ b/xen/common/libelf/libelf-dominfo.c @@ -269,6 +269,7 @@ elf_errorstatus elf_xen_parse_guest_info(struct elf_binary *elf, elf_ptrval h; unsigned char name[32], value[128]; unsigned len; + elf_errorstatus ret = 0; h = parms->guest_info; #define STAR(h) (elf_access_unsigned(elf, (h), 0, 1)) @@ -336,16 +337,23 @@ elf_errorstatus elf_xen_parse_guest_info(struct elf_binary *elf, if ( !strcmp(name, "ELF_PADDR_OFFSET") ) parms->elf_paddr_offset = strtoull(value, NULL, 0); if ( !strcmp(name, "HYPERCALL_PAGE") ) - parms->virt_hypercall = (strtoull(value, NULL, 0) << 12) + - parms->virt_base; + parms->virt_hypercall = strtoull(value, NULL, 0) << 12; /* other */ if ( !strcmp(name, "FEATURES") ) if ( elf_xen_parse_features(value, parms->f_supported, parms->f_required) ) - return -1; + { + ret = -1; + break; + } } - return 0; + + if ( (parms->virt_base != UNSET_ADDR) && + (parms->virt_hypercall != UNSET_ADDR) ) + parms->virt_hypercall += parms->virt_base; + + return ret; } /* ------------------------------------------------------------------------ */ -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |