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

[PATCH v2] x86/nSVM: Ignore bits 11:0 of MSRPM_BASE_PA in L1's VMCB for L2


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Stephen Cheng <stephen.cheng@xxxxxxxxxx>
  • Date: Tue, 27 Oct 2026 09:16:10 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • 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=Avm3pNueSvCWDc0rcC+pqLww0AITH4pWts4SeFG/fdI=; b=yqWMiVJQahDY/XtYAhVuuU6r35N58Eq9yJIF6f+X4EgxhBWGMGEHunnBGVXHKD/Z5koVqaXht9KaT9dB5NI2JdRjeNu4IrJ4rRAf3SGlEGJEM9nXR8yLV5iyB535ruNx9vDOF7aKndNPx1u52lv4Lwc9/dhcrejqs1OKWq1FODP8K3Vt0iayh6Sty5gsQrBirmZKOufsRIyOSxlcAlXsR7XoOzDt5bZi5g99DiGVlYLYgedKprPcs62Ft8uh3Ml/cETmMbbQDo1Sa+gQi/34XJ162q7J0VZ6u9YtQF/mmPOSZoQhzQx/FAVt+olxMDKc3gSKIhIs+gDz6LZWsqCuVA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yd7+9jQyjiUpABAWAY8DnnEVjua2h2ImB82Q7O2oxT3kGnsduDF38jrurJhfkXb7OZ66HdP2uykX4upQCtU6YfCOvlFP7JU7jwllb1oCzCbynkkNFS2WFnZ/F5uAf27jLogCNhtlwt32dOhPnsiH0abkxpG0cb+igl+S8ie4jJRm+KCpAgoGlz1Z5ujxFa6xSnpx3rvkL65ZT9dd/AyK2sRIaVFbvdz4HHhdm0NmF/ZYMcqCBku2bhGMdjbN6ylCxzUve7dfrbDJDhLrx2weEbXytv2f6HDkML+Z5UzZswii3way1FJFTQr+fSDN2pUkUgLsFxA7kIEgbzrY9mOFvw==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>, Stephen Cheng <stephen.cheng@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger@xxxxxxxxxxxxxx>, Jason Andryuk <jason.andryuk@xxxxxxx>, Teddy Astie <teddy.astie@xxxxxxxxxx>
  • Delivery-date: Tue, 27 Oct 2026 01:19:36 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

VMRUN ignores bits 11:0 of MSRPM_BASE_PA (APM volume 2, 24593 Rev. 3.44,
section 15.11 "MSR Intercepts").  On L1's VMRUN of L2,
nsvm_vmrun_permissionmap() copies the MSR permission map which L1 set up
for L2 from MSRPM_BASE_PA exactly as L1 wrote it.  With any of those bits
set, the copy starts at the wrong offset, so both the map L0 runs L2 with
and the intercept check on #VMEXIT use the wrong bits: L1 can miss
intercepts it set or see ones it didn't, and the copy may run into the
following page, giving a spurious VMEXIT_INVALID if that isn't RAM.

Mask the address before copying.

Fixes: 9a779e4fc161 ("Implement SVM specific part for Nested Virtualization")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Stephen Cheng <stephen.cheng@xxxxxxxxxx>
Reviewed-by: Ross Lagerwall <ross.lagerwall@xxxxxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---

Notes:
    v2:
     - Say which permission map: the one L1 sets up for L2 (Ross).
     - Add the APM section title (Jan).

 xen/arch/x86/hvm/svm/nestedsvm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/hvm/svm/nestedsvm.c b/xen/arch/x86/hvm/svm/nestedsvm.c
index 2b998e26bc..56d0f0fa4d 100644
--- a/xen/arch/x86/hvm/svm/nestedsvm.c
+++ b/xen/arch/x86/hvm/svm/nestedsvm.c
@@ -309,8 +309,10 @@ static int nsvm_vmrun_permissionmap(struct vcpu *v)
 
     ns_msrpm_ptr = (unsigned long *)svm->ns_cached_msrpm;
 
+    /* VMRUN ignores bits 11:0 of MSRPM_BASE_PA. */
     ret = hvm_copy_from_guest_phys(svm->ns_cached_msrpm,
-                                   ns_vmcb->_msrpm_base_pa, MSRPM_SIZE);
+                                   ns_vmcb->_msrpm_base_pa & PAGE_MASK,
+                                   MSRPM_SIZE);
     if ( ret != HVMTRANS_okay )
     {
         gdprintk(XENLOG_ERR, "hvm_copy_from_guest_phys msrpm %u\n", ret);

base-commit: 4e3c0eeac5761c505f8229e82d265eb29957ca5c
-- 
2.49.0




 


Rackspace

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