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

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


  • To: Jason Andryuk <jason.andryuk@xxxxxxx>, <jgross@xxxxxxxx>
  • From: Alejandro Vallejo <agarciav@xxxxxxx>
  • Date: Fri, 11 Apr 2025 13:46:37 +0100
  • 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=cNtvIg+H4tFX740mgdYuO8dNQ81YAJnWx5NOCcftHp8=; b=AHhXmeWk8uZVfFIkwfH/cehbBpplnbIxMYtrmu0aFM5+OtrMs3DbuyxhnM3KxLy29cRPd3M6lyi5BISgVhKbEdRcderOpE0zWZrTqsfE6bwXwGQS2j2yQonhQj7DdrFlWE3vjfsmuMoikM4ywMqMjjef+Y7oNeH8qQDqP7392eG20g/A9sNZWESGEgcegEsOzOGQkSEmiI6o6X1hNrPkL8NBpuOikpCQHCzuGIqp3h7Ubnl6hKAj2XkHU3rroGwWWR1ymVUZXOa7YBGXatfY/YYZy09eDwT4E7tGpAUw1jOY6hopfpiangh34Go2+0lvK2KOgNiv2S3MII5d0T8tBQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gfKSB8piQ7rhQFso15KqcTBTNaRr9xZPcV7SWoWH8kPukRlhmaWTPYwtazH5iMeicilAMfJmn5kXsQ9RMsVbs1PpHofGQ2Sd1qZpIRorUSlUmhotGV+hPvKhDN+wIjvCBZJM/lb4lEvC6BL0HyFB+jFIjs0nJ4yaOn+BS4GXFXngJbpUR1uW8P9u4eKVoP+JwE0OXZ+vK2bhw7sr4Mfe9SI5rwPp/Jl7swEi9Qj+ntl3pmYeJ64rWw+7zXWc/Y1W9WX4GPYknHGeiFhQlyP3WlfWaG15nOq8WFSs06n6JdUA+6J8fMeIxeefgcQvVC0HW1lXHMyUOWXp8xVj4r41tw==
  • Cc: <andrew.cooper3@xxxxxxxxxx>, <anthony.perard@xxxxxxxxxx>, <marmarek@xxxxxxxxxxxxxxxxxxxxxx>, <michal.orzel@xxxxxxx>, <roger.pau@xxxxxxxxxx>, <sstabellini@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Fri, 11 Apr 2025 12:46:55 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Thu Apr 10, 2025 at 8:50 PM BST, Jason Andryuk wrote:
> 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

(Now that this is known to be the fix upstream) This probably wants to
be plain lea without RIP-relative addressing, like the x86_32 branch
above?

>       cmp %rax, %rcx
>  #ifdef CONFIG_FRAME_POINTER
>       pop %rax        /* Dummy pop. */




 


Rackspace

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