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

[RFC PATCH] x86/xen: Fix PVH dom0 xen_hypercall detection


  • To: <agarciav@xxxxxxx>, <jgross@xxxxxxxx>
  • From: Jason Andryuk <jason.andryuk@xxxxxxx>
  • Date: Thu, 10 Apr 2025 15:50:12 -0400
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=suse.com 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=a403CpeXu00vevEWK/Gvu+k567EX/rf6b895FNpNw9U=; b=Dqey2R1K2IXEC12c2k8szXeg6Z2WYIOjYN83v78RtAK73FnrmQANLSugOtGmjiqlswp9TrPd76K/6b7v6gz4S8axrN0xpzlcFp0zq2RxdgnlBzpXf0XFh0HqNDSMzuhdXSpNJaAcxUUe4rdYcYINUzl8MBoFhUYPeI2U5MfMBOIOCmeEMfjv8BTANpkQyrHwE+eGW9rFh/V2SlcDX8exdqJVQx+Ydr0T48sk6vAD1OeVLczc1v7BaPd2ptGGNywZaucFHhzbNVPp/o/bZ4XGgZ4L1WFFtfTDHlmgZeU9dfcjDkStuTYVG5K/pR36IVV69Gexu5yLdHyg5lnLi4XtPA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W+HINt01kRae8g4vJriX4CYXRASSxKgP1ECdL35ovkWgup91b1iMJYTS2s8xl6CvepgFr1D+VetNaNGjoUg5OxXdcCdRX2GIw/IaYXq1VJZYLeC4HzyESY9Ziv8giQmDWFafvy9RQG6CGc9cTZ7jQzd0OoeuRZxrJM48UuzDbq4tmo0vXDbtwv3iLnZhZVV8rkzUdaj4bKZOExSBK1CtbOsu8XdQRLUIvLoqxuhTY3y5P9Fh3CYKX0tejz6kI+vQtNro+HWNHuK8KuG7/ovVHuewfVIupONLvid0dxEVrnNyzijnzeyx4+BphQIlcIRLS9JpOr0wAz7XCojjG8PVmQ==
  • Cc: <andrew.cooper3@xxxxxxxxxx>, <anthony.perard@xxxxxxxxxx>, <jason.andryuk@xxxxxxx>, <marmarek@xxxxxxxxxxxxxxxxxxxxxx>, <michal.orzel@xxxxxxx>, <roger.pau@xxxxxxxxxx>, <sstabellini@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Thu, 10 Apr 2025 19:50:31 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

A Xen PVH dom0 on an AMD processor triple faults early in boot on
6.6.86.  CPU detection appears to fail, as the faulting instruction is
vmcall in xen_hypercall_intel() and not vmmcall in xen_hypercall_amd().

Detection fails because __xen_hypercall_setfunc() returns the full
kernel mapped address of xen_hypercall_amd() or xen_hypercall_intel() -
e.g. 0xffffffff815b93f0.  But this is compared against the rip-relative
xen_hypercall_amd(%rip), which when running from identity mapping, is
only 0x015b93f0.

Replace the rip-relative address with just loading the actual address to
restore the proper comparision.

This only seems to affect PVH dom0 boot.  This is probably because the
XENMEM_memory_map hypercall is issued early on from the identity
mappings.  With a domU, the memory map is provided via hvm_start_info
and the hypercall is skipped.  The domU is probably running from the
kernel high mapping when it issues hypercalls.

Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx>
---
I think this sort of address mismatch would be addresed by
e8fbc0d9cab6 ("x86/pvh: Call C code via the kernel virtual mapping")

That could be backported instead, but it depends on a fair number of
patches.

Not sure on how getting a patch just into 6.6 would work.  This patch
could go into upstream Linux though it's not strictly necessary when the
rip-relative address is a high address.
---
 arch/x86/xen/xen-head.S | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
index 059f343da76d..71a0eda2da60 100644
--- a/arch/x86/xen/xen-head.S
+++ b/arch/x86/xen/xen-head.S
@@ -117,7 +117,7 @@ SYM_FUNC_START(xen_hypercall_hvm)
        pop %ebx
        pop %eax
 #else
-       lea xen_hypercall_amd(%rip), %rcx
+       mov $xen_hypercall_amd, %rcx
        cmp %rax, %rcx
 #ifdef CONFIG_FRAME_POINTER
        pop %rax        /* Dummy pop. */
-- 
2.49.0




 


Rackspace

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