From patchwork Wed Oct 11 13:35:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gregory Herrero X-Patchwork-Id: 9999645 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 7ADDE60244 for ; Wed, 11 Oct 2017 13:37:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 612B128A3E for ; Wed, 11 Oct 2017 13:37:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 534E528A40; Wed, 11 Oct 2017 13:37:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id CF3B828A3E for ; Wed, 11 Oct 2017 13:37:58 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e2HAZ-0000Nu-TB; Wed, 11 Oct 2017 13:35:31 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e2HAZ-0000No-DZ for xen-devel@lists.xen.org; Wed, 11 Oct 2017 13:35:31 +0000 Received: from [193.109.254.147] by server-2.bemta-6.messagelabs.com id A6/96-02373-22E1ED95; Wed, 11 Oct 2017 13:35:30 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrGLMWRWlGSWpSXmKPExsXSO6nOVVdO7l6 kwdUFUhZLPi5mcWD0OLr7N1MAYxRrZl5SfkUCa8a55tKCTYIVD9e0szQwruXtYuTkEBKYzCSx 60tQFyMXkH2ZUWLZpTdsIAk2AQWJ5zNfsoLYIgLSEtc+X2YEKWIWaGCSeHJhNlhCWCBNYlPTR 7AGFgFVibdTNrKD2LwC9hL7drxhBrElBOQlzj24DWUbS/TN6mOZwMi1gJFhFaNGcWpRWWqRrp GJXlJRZnpGSW5iZo6uoYGZXm5qcXFiempOYlKxXnJ+7iZGoB8ZgGAH476PkYcYJTmYlER5rz+ /GynEl5SfUpmRWJwRX1Sak1p8iFGGg0NJgjdD9l6kkGBRanpqRVpmDjCgYNISHDxKIrxrQNK8 xQWJucWZ6RCpU4y6HB037/5hEmLJy89LlRLndQcpEgApyijNgxsBC+5LjLJSwryMQEcJ8RSkF uVmlqDKv2IU52BUEub1ApnCk5lXArfpFdARTEBHiKbdATmiJBEhJdXAGLqRjWNe8L8LZs+nz6 wUZK7VUPSQ7tPs+yY5a/JKQcb91ZvNj60/eibsb/zc+hdmfMHVu877di8XPc65Yp97163lJ9j O+8ptyc1W3lL5+nZN4vV/cZybLjquvxn7NFLZRtr+cWGEZFfbVSdm/317f2uUX5Eolqn/LPNg zcuLG68JGZ5pOKGuqMRSnJFoqMVcVJwIAEcgbpNpAgAA X-Env-Sender: gregory.herrero@oracle.com X-Msg-Ref: server-15.tower-27.messagelabs.com!1507728924!58321890!1 X-Originating-IP: [141.146.126.69] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTQxLjE0Ni4xMjYuNjkgPT4gMjc3MjE4\n X-StarScan-Received: X-StarScan-Version: 9.4.45; banners=-,-,- X-VirusChecked: Checked Received: (qmail 3116 invoked from network); 11 Oct 2017 13:35:26 -0000 Received: from aserp1040.oracle.com (HELO aserp1040.oracle.com) (141.146.126.69) by server-15.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 11 Oct 2017 13:35:26 -0000 Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id v9BDZGYh004626 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 11 Oct 2017 13:35:16 GMT Received: from localhost.localdomain (dhcp-ukc1-twvpn-1-vpnpool-10-175-178-56.vpn.oracle.com [10.175.178.56]) by aserv0021.oracle.com (8.14.4/8.14.4) with ESMTP id v9BDZCNr027645; Wed, 11 Oct 2017 13:35:12 GMT From: gregory.herrero@oracle.com To: xen-devel@lists.xen.org Date: Wed, 11 Oct 2017 15:35:08 +0200 Message-Id: <20171011133508.23147-1-gregory.herrero@oracle.com> X-Mailer: git-send-email 2.14.1 X-Source-IP: aserv0021.oracle.com [141.146.126.233] Cc: sstabellini@kernel.org, wei.liu2@citrix.com, konrad.wilk@oracle.com, George.Dunlap@eu.citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, jbeulich@suse.com, andrew.cooper3@citrix.com, Gregory Herrero Subject: [Xen-devel] [PATCH v2] libelf: allow having HYPERCALL_PAGE entry before VIRT_BASE in __xen_guest section. X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Gregory Herrero 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 Reviewed-by: Jan Beulich --- Changed since v1: * set virt_hypercall once after the while loop. --- xen/common/libelf/libelf-dominfo.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c index a52900c00cd..eaeb774ff3d 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,22 @@ 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; } /* ------------------------------------------------------------------------ */