From patchwork Thu Feb 23 16:01:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 9588483 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 F208D6057F for ; Thu, 23 Feb 2017 16:11:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E36C628925 for ; Thu, 23 Feb 2017 16:11:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D8E532892F; Thu, 23 Feb 2017 16:11:36 +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 5FEB828925 for ; Thu, 23 Feb 2017 16:11:36 +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 1cgvx2-0000Wa-MQ; Thu, 23 Feb 2017 16:09:04 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cgvx1-0000WS-88 for xen-devel@lists.xenproject.org; Thu, 23 Feb 2017 16:09:03 +0000 Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id 9F/BF-01926-E190FA85; Thu, 23 Feb 2017 16:09:02 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrBIsWRWlGSWpSXmKPExsWyU9JRQleWc32 EwaQP1hbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8a6vgUsBQ9lKnZ07GJqYNwm2sXIySEh4Cdx 8dxdNhCbRUBVYvK7FhYQm01AR+Li3J1gcREBZYneX7+B4lwczAKbGCUWLp7DCpIQFoiWOHzrJ jOIzSvgKXHk1WJ2EFtIYA6jxO0mCYi4oMTJmU/AhjIL6EncmDoFaCgHkC0tsfwfB0RYXqJ562 ywMZwC9hLz3s4FKxcVUJHoPfCHBWKkokT/vAdsEDenS2z9+4t5AqPALCQbZiHZMAthwywkGxY wsqxi1ChOLSpLLdI1MtFLKspMzyjJTczM0TU0MNXLTS0uTkxPzUlMKtZLzs/dxAgM2XoGBsYd jDcn+x1ilORgUhLlfXZxXYQQX1J+SmVGYnFGfFFpTmrxIUYNDg6BzWtXX2CUYsnLz0tVkuBdy r4+QkiwKDU9tSItMwcYVTClEhw8SiK8XiBp3uKCxNzizHSI1ClGXY5bDXveMAmBzZAS580EKR IAKcoozYMbAYvwS4yyUsK8jAwMDEI8BalFuZklqPKvGMU5GJWEef+DTOHJzCuB2/QK6AgmoCM sndeCHFGSiJCSamDUTFZbdDC+48o21ZaUG8+XrE8tU+mZstG8Pj58+ps2u18h3+bfMV+18+GO 3Rn3lqy6l/Xo4O9zBhfXiG46Z7Slev1frzMM7NslLP9u+t8tk/16ikbfY+8PTnfZGuatUJi6T V0vQvSpRWhQz7fv5vIly8P7WfqPZby+nvFDIMxOUrH84YkMrt03lViKMxINtZiLihMBgFv35u sCAAA= X-Env-Sender: prvs=220abfa14=roger.pau@citrix.com X-Msg-Ref: server-2.tower-206.messagelabs.com!1487866141!65797020!1 X-Originating-IP: [185.25.65.24] X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 21850 invoked from network); 23 Feb 2017 16:09:01 -0000 Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24) by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 23 Feb 2017 16:09:01 -0000 X-IronPort-AV: E=Sophos;i="5.35,198,1484006400"; d="scan'208";a="41320481" Date: Thu, 23 Feb 2017 16:01:18 +0000 From: Roger Pau Monne To: Jan Beulich Message-ID: <20170223160118.xymyqbbzxiad54yl@dhcp-3-221.uk.xensource.com> References: <20170222142459.28199-1-roger.pau@citrix.com> <20170222142459.28199-5-roger.pau@citrix.com> <58AEF5FC020000780013D42A@prv-mh.provo.novell.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <58AEF5FC020000780013D42A@prv-mh.provo.novell.com> User-Agent: NeoMutt/20170206 (1.7.2) X-ClientProxiedBy: AMSPEX02CAS01.citrite.net (10.69.22.112) To AMSPEX02CL02.citrite.net (10.69.22.126) Cc: Andrew Cooper , boris.ostrovsky@oracle.com, Ian Jackson , xen-devel@lists.xenproject.org Subject: Re: [Xen-devel] [PATCH v7 4/7] x86/libelf: pass the destination vCPU to libelf for Dom0 build 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: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP On Thu, Feb 23, 2017 at 06:47:24AM -0700, Jan Beulich wrote: > >>> On 22.02.17 at 15:24, wrote: > > Allow setting the destination vCPU for libelf, so that elf_load_image can take > > it into account when loading the kernel for Dom0. This is needed for PVHv2 Dom0 > > build, so that hvm_copy_to_guest_phys can be called with a Dom0 vCPU instead of > > current (that contains the idle vCPU at this point). > > > > Signed-off-by: Roger Pau Monné > > Reviewed-by: Jan Beulich > albeit ... > > > --- a/xen/common/libelf/libelf-loader.c > > +++ b/xen/common/libelf/libelf-loader.c > > @@ -146,6 +146,25 @@ void elf_set_verbose(struct elf_binary *elf) > > elf->verbose = 1; > > } > > > > +static elf_errorstatus elf_memcpy(struct vcpu *v, void *dst, void *src, > > + uint64_t size) > > +{ > > + int rc = 0; > > + > > +#ifdef CONFIG_X86 > > + if ( is_hvm_vcpu(v) ) > > + { > > + rc = hvm_copy_to_guest_phys((paddr_t)dst, src, size, v); > > + rc = rc != HVMCOPY_okay ? -1 : 0; > > + } > > + else > > +#endif > > + rc = src == NULL ? raw_clear_guest(dst, size) : > > + raw_copy_to_guest(dst, src, size); > > + > > + return rc; > > +} > > ... elf_errorstatus is not a correct type for the return values of > raw_{copy_to,clear}_guest(). Nevertheless that's in line with ... > > > static elf_errorstatus elf_load_image(struct elf_binary *elf, elf_ptrval dst, elf_ptrval src, uint64_t filesz, uint64_t memsz) > > { > > elf_errorstatus rc; > > ... the variable declared here having been used ... > > > @@ -153,10 +172,12 @@ static elf_errorstatus elf_load_image(struct elf_binary *elf, elf_ptrval dst, el > > return -1; > > /* We trust the dom0 kernel image completely, so we don't care > > * about overruns etc. here. */ > > - rc = raw_copy_to_guest(ELF_UNSAFE_PTR(dst), ELF_UNSAFE_PTR(src), filesz); > > + rc = elf_memcpy(elf->vcpu, ELF_UNSAFE_PTR(dst), ELF_UNSAFE_PTR(src), > > + filesz); > > if ( rc != 0 ) > > return -1; > > - rc = raw_clear_guest(ELF_UNSAFE_PTR(dst + filesz), memsz - filesz); > > + rc = elf_memcpy(elf->vcpu, ELF_UNSAFE_PTR(dst + filesz), NULL, > > + memsz - filesz); > > ... the same (wrong) way, so should be good enough for now. > Ideally the setting of rc in elf_memcpy() would be corrected, though. Would you like to squash the following chunk on top of this patch? ---8<--- diff --git a/xen/common/libelf/libelf-loader.c b/xen/common/libelf/libelf-loader.c index 371061c..1acecab 100644 --- a/xen/common/libelf/libelf-loader.c +++ b/xen/common/libelf/libelf-loader.c @@ -149,20 +149,22 @@ void elf_set_verbose(struct elf_binary *elf) static elf_errorstatus elf_memcpy(struct vcpu *v, void *dst, void *src, uint64_t size) { - int rc = 0; + unsigned int res; #ifdef CONFIG_X86 if ( is_hvm_vcpu(v) ) { + enum hvm_copy_result rc; + rc = hvm_copy_to_guest_phys((paddr_t)dst, src, size, v); - rc = rc != HVMCOPY_okay ? -1 : 0; + return rc != HVMCOPY_okay ? -1 : 0; } else #endif - rc = src == NULL ? raw_clear_guest(dst, size) : - raw_copy_to_guest(dst, src, size); + res = src == NULL ? raw_clear_guest(dst, size) : + raw_copy_to_guest(dst, src, size); - return rc; + return res != 0 ? -1 : 0; } static elf_errorstatus elf_load_image(struct elf_binary *elf, elf_ptrval dst, elf_ptrval src, uint64_t filesz, uint64_t memsz)