[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/5] x86/pvh: Call C code via the kernel virtual mapping


  • To: Ard Biesheuvel <ardb@xxxxxxxxxx>, Ard Biesheuvel <ardb+git@xxxxxxxxxx>
  • From: Jason Andryuk <jason.andryuk@xxxxxxx>
  • Date: Thu, 26 Sep 2024 16:29:54 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3T8JIBd7rq5lswK9R4woRdCqL5SsqEyTDaVhyz0YUtc=; b=Rou5+F/judTOqiH9sBY/vvog/awJQITeTvrdIPzIdMMIr3lv7sq5z/kTBM9r5JbBZQpPZPuohe6UDE1N4LQwuY4MrrU+fQPaBOJjOTvi9FlS4oeKHJ2A5adZxV03Xid2XrPOavTVF3CeX7h1zdimXswiSFqnjrHKb57Ccq2TZ7BBZ6xqe1leabIycEnPYo1A6G1xvBn9pMZAUeThd0p6q6exLUBoL1k6cKgTM/ojC2lWkaCh6V0W+TOoH9CVqPQ6GXKzDtHmD36Pa6/zw0Lp7i/eV5FohrW2/YVDuI7wvgH/+1Vk8v+Y/J2QjbsIKTcWPqqsTJjiIvRe77h5AyZjIg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FLO6FIlb72n7zU7GEuNN4xQ5tMO1aurRVYOQuQqEzJz94pbN0vAvjevjUaigLCWvOIUhZPzh0SMB/WFlpG2DlHmmo4DDAmPp0qtDWoeiSbvIEXNc0KWaOXwirvzWEbKNr9qVKDhDNOD/KamqcKMXQ7FOvAkv+td5fUvytMqcA/OqoB05OfdJLBPXL06AnurAzdq+EpX8Isq/3vf7OjGjOhzfg/Uth6lwO/Q1peifK8ovtfeINfvi0zbL6M26gzHtZ3iw5mEnbaXeiyTgx6687p/9erpTPQ/k+Zkl8v6wuNCeQxgZt18rZbSymLyjjIolTYESuzAV+ZOpbRbOvwGWQg==
  • Cc: <linux-kernel@xxxxxxxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>, <x86@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Thu, 26 Sep 2024 20:31:50 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 2024-09-26 06:55, Ard Biesheuvel wrote:
On Thu, 26 Sept 2024 at 12:41, Ard Biesheuvel <ardb+git@xxxxxxxxxx> wrote:

From: Ard Biesheuvel <ardb@xxxxxxxxxx>

Calling C code via a different mapping than it was linked at is
problematic, because the compiler assumes that RIP-relative and absolute
symbol references are interchangeable. GCC in particular may use
RIP-relative per-CPU variable references even when not using -fpic.

So call xen_prepare_pvh() via its kernel virtual mapping on x86_64, so
that those RIP-relative references produce the correct values. This
matches the pre-existing behavior for i386, which also invokes
xen_prepare_pvh() via the kernel virtual mapping before invoking
startup_32 with paging disabled again.

Fixes: 7243b93345f7 ("xen/pvh: Bootstrap PVH guest")
Tested-by: Jason Andryuk <jason.andryuk@xxxxxxx>
Reviewed-by: Jason Andryuk <jason.andryuk@xxxxxxx>
Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
---
  arch/x86/platform/pvh/head.S | 8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/arch/x86/platform/pvh/head.S b/arch/x86/platform/pvh/head.S
index 64fca49cd88f..98ddd552885a 100644
--- a/arch/x86/platform/pvh/head.S
+++ b/arch/x86/platform/pvh/head.S
@@ -172,7 +172,13 @@ SYM_CODE_START_LOCAL(pvh_start_xen)
         movq %rbp, %rbx
         subq $_pa(pvh_start_xen), %rbx
         movq %rbx, phys_base(%rip)
-       call xen_prepare_pvh
+
+       /* Call xen_prepare_pvh() via the kernel virtual mapping */
+       leaq xen_prepare_pvh(%rip), %rax

Just realized that we probably need

+       subq phys_base(%rip), %rax

Yes, this is necessary when phys_base is non-0. I intended to test a non-0 case yesterday, but it turns out I didn't. Re-testing, I have confirmed this subq is necessary.

Thanks,
Jason



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.