From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4E68F3DB655 for ; Tue, 5 May 2026 19:53:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778010793; cv=none; b=Kc9IPyNiEcNe1K327CqiW7EPdY+G2cR1Ki5bPNBfywXMduODj+5schSLPnkDQ1baok59LGRKRY1x1u3lrP+Qhrr/3/HCeanHoGKVw5owqM9NDDHIooPSH6exPRhx2MTt7/p3U/WLS+13sWOzFEcl6HmLeuJfGwP5V89+HOiIm04= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778010793; c=relaxed/simple; bh=jfvm/JnkfbaGQPdbMd6FbQ2YV2ugfIWTAz91e6zk7U8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mGHOgv5yScYxPQe6SOap9rTqG3LS2NXdtpYcXcoaHW0TIttACpTRWjlbDJiNP8D0F9MraN0DljLKCH64By0a648BMqMVNfKCbHjkijyvfsiHct4NieNT3ZhOyds9XtvHFHH9ptVRFe8YfCdN/HOXjYP02LxKKMa/apYRufyv41M= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=feIgyA1l; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=OXQ/IDRv; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="feIgyA1l"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="OXQ/IDRv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1778010791; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/gfkifHMFZcUI+UK6c3nYqWoKDoO6Dy1f2zDJck75gI=; b=feIgyA1lq/LjPRZc9uVncr0lm1mBilu5Z5srfODGbQgYU+vfh5GPoWCV5hH6XivOHKFSYP TvE6WxFTzFVuXsN1Ng96/mv6K5OnlcapLW4fJG0IYQatyxUDnTLfmJwnMp26r52312tYQR CkT7ADfogDuwzaSPGSxQwvnXzNCwJ+0= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-367-e1M_Qu_kPQaWdw6kKEi-Cg-1; Tue, 05 May 2026 15:53:10 -0400 X-MC-Unique: e1M_Qu_kPQaWdw6kKEi-Cg-1 X-Mimecast-MFC-AGG-ID: e1M_Qu_kPQaWdw6kKEi-Cg_1778010789 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-44ffa15dc73so983274f8f.1 for ; Tue, 05 May 2026 12:53:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1778010788; x=1778615588; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/gfkifHMFZcUI+UK6c3nYqWoKDoO6Dy1f2zDJck75gI=; b=OXQ/IDRv47Bx6AMLIEKkjX2oYFQBhVnIrU1tmwwAfQbeFYASy5wMq/HN5dJEmGh2th 7/+1sf1l9jY9pF+Jx7vfj+/V6gkTjQ4i+lWnmbq/txCpR619rJK7QUEjvPZR4da6wbuJ D7amuohkVQd2p/LMzAOWjvLDfMtITm0bUSBEU1rYsZL0e31fH9Xj3s3QhmYfmfYZwY1e dykzaE8YSlDE8ojxcNetUfsJMEtLJXOsH789bIoU392UtpbLqL0hWA+WBN1cVn7+bEKT RblVVVlWgLKRvqk6Dx/wnYTY/ks/Q2L3u28K/LjHk4sLYovvjmJmO5/Cs+Kyf86KuBYA MLeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778010788; x=1778615588; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=/gfkifHMFZcUI+UK6c3nYqWoKDoO6Dy1f2zDJck75gI=; b=WhUWjNhoT7KXMyK9ulxapf9Cib/j06P9RQi9r2QaHP/S5AXYdapgrfImcvFyVrVeG1 gxQuCA0ulStBaFCdd6DuuA8vjkdrmveQ0Gws7Mpl7urx3KfXbsqymU4dKolHVqgINWsY fZAoLC7FWkLX/kyH9JNmkDbsSpOz0JiDXu4O6miScDC4hq0NB6c1gLvB9MJBl3ftETWn mEgGC2eZdWYOmbQ24UzCsurbF93mbdXG0jATBaUWtSylipSe9P2cpyRICFeKXA0enLOH qp3h0zvvund8XmwXjI5oxCBb9e0A9ak7Kv5jJJg5srcgUf/mIr19Mvyh4GEbYurEGIaR Q8kw== X-Gm-Message-State: AOJu0Yz2YaftmuWjOwfCDH64mCYQtgKCzeXTINNFR7n+LgkI7pSGd2BX 0hrmwIc1H3FptB7BoyMWsqJH3V7vm/ZV2pFUq8IArQetEun3tRpKT7JSY2OxhwXGBFaRK0al6N9 VE2daIEdbI387C2Tqk2iLGAbfPdp+8yYAl8bmgM3/owJqOvPFLOvV7W6DApKIfWtZToY32w033D aEXh8P9I8gklT5VtNng3bcSSkgu/MKtfxqdHShQLxm3i67TUEZfA== X-Gm-Gg: AeBDiev5NlKiAN9WXVBfUEeb2P5LMaYN9ydd1jzHFQhXYArT/ycREKUCko9t++TK7kF 43LpkUUoS2l+CKWYxUkom3SpYamw3CGgWr1eQjDP9SfWnf7u+FUgeZbYEp4rNOHcXQ6KffC6kF4 rJZurKujLuZdnQiV/vNDoooaVAHKZbfrcteo/7Ed1dzLC9evRDNO7Ua85abqa2zEp0vej06eyOp l8ndLMOzHTZFq+btGXL5eqwdb8D7qMUMu52itpZp0AOn0rnIhMZPwzSRq+7S/1b/qa92ddiiKL2 vOM900rAaOdiiUUcpBWC6uWM3RmFI0G0QMEmZ/N4RUzP6NtkR+hUMFugKqJYROZCN91jRqnccuQ XrfcyewEeoQLr5/QOhMTkrgnPTaDPsq5P1mOUVc+UilnEBzbTHkrh3s0wT/Vpy3MsWGSbcpTGJK bvCW1/qgFxgqyxyaF86ecx8KKAOyvLMABI5UPF4K0= X-Received: by 2002:a5d:5f84:0:b0:43c:fe0e:5bb9 with SMTP id ffacd0b85a97d-4515b523fa3mr789632f8f.12.1778010788171; Tue, 05 May 2026 12:53:08 -0700 (PDT) X-Received: by 2002:a5d:5f84:0:b0:43c:fe0e:5bb9 with SMTP id ffacd0b85a97d-4515b523fa3mr789599f8f.12.1778010787670; Tue, 05 May 2026 12:53:07 -0700 (PDT) Received: from [192.168.10.48] ([176.206.106.181]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-450524833e1sm6878462f8f.2.2026.05.05.12.53.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 May 2026 12:53:06 -0700 (PDT) From: Paolo Bonzini To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: d.riley@proxmox.com, jon@nutanix.com Subject: [PATCH 16/28] KVM: nVMX: pass advanced EPT violation vmexit info to guest Date: Tue, 5 May 2026 21:52:14 +0200 Message-ID: <20260505195226.563317-17-pbonzini@redhat.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260505195226.563317-1-pbonzini@redhat.com> References: <20260505195226.563317-1-pbonzini@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit KVM will use advanced vmexit information for EPT violations to virtualize MBEC. Pass it to the guest since it is easy and allows testing nested nested. Tested-by: David Riley Signed-off-by: Paolo Bonzini --- arch/x86/include/asm/vmx.h | 4 ++++ arch/x86/kvm/mmu/paging_tmpl.h | 2 +- arch/x86/kvm/vmx/nested.c | 13 +++++++++---- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index 54aa5be50df9..ed2ded531e55 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h @@ -535,6 +535,7 @@ enum vmcs_field { #define VMX_EPT_1GB_PAGE_BIT (1ull << 17) #define VMX_EPT_INVEPT_BIT (1ull << 20) #define VMX_EPT_AD_BIT (1ull << 21) +#define VMX_EPT_ADVANCED_VMEXIT_INFO_BIT (1ull << 22) #define VMX_EPT_EXTENT_CONTEXT_BIT (1ull << 25) #define VMX_EPT_EXTENT_GLOBAL_BIT (1ull << 26) @@ -617,6 +618,9 @@ enum vm_entry_failure_code { EPT_VIOLATION_PROT_USER_EXEC) #define EPT_VIOLATION_GVA_IS_VALID BIT(7) #define EPT_VIOLATION_GVA_TRANSLATED BIT(8) +#define EPT_VIOLATION_GVA_USER BIT(9) +#define EPT_VIOLATION_GVA_WRITABLE BIT(10) +#define EPT_VIOLATION_GVA_NX BIT(11) #define EPT_VIOLATION_RWX_TO_PROT(__epte) (((__epte) & VMX_EPT_RWX_MASK) << 3) #define EPT_VIOLATION_USER_EXEC_TO_PROT(__epte) (((__epte) & VMX_EPT_USER_EXECUTABLE_MASK) >> 4) diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h index 8dd9d510fc34..d4ce55195a7c 100644 --- a/arch/x86/kvm/mmu/paging_tmpl.h +++ b/arch/x86/kvm/mmu/paging_tmpl.h @@ -494,7 +494,7 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker, * [2:0] - Derive from the access bits. The exit_qualification might be * out of date if it is serving an EPT misconfiguration. * [5:3] - Calculated by the page walk of the guest EPT page tables - * [7:8] - Derived from [7:8] of real exit_qualification + * [7:11] - Derived from [7:11] of real exit_qualification * * The other bits are set to 0. */ diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 299d4ca60fb3..46b65475765d 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -443,10 +443,14 @@ static void nested_ept_inject_page_fault(struct kvm_vcpu *vcpu, vm_exit_reason = EXIT_REASON_EPT_MISCONFIG; exit_qualification = 0; } else { + u64 mask = EPT_VIOLATION_GVA_IS_VALID | + EPT_VIOLATION_GVA_TRANSLATED; + if (vmx->nested.msrs.ept_caps & VMX_EPT_ADVANCED_VMEXIT_INFO_BIT) + mask |= EPT_VIOLATION_GVA_USER | + EPT_VIOLATION_GVA_WRITABLE | + EPT_VIOLATION_GVA_NX; exit_qualification = fault->exit_qualification; - exit_qualification |= vmx_get_exit_qual(vcpu) & - (EPT_VIOLATION_GVA_IS_VALID | - EPT_VIOLATION_GVA_TRANSLATED); + exit_qualification |= vmx_get_exit_qual(vcpu) & mask; vm_exit_reason = EXIT_REASON_EPT_VIOLATION; } @@ -7240,7 +7244,8 @@ static void nested_vmx_setup_secondary_ctls(u32 ept_caps, VMX_EPT_PAGE_WALK_5_BIT | VMX_EPTP_WB_BIT | VMX_EPT_INVEPT_BIT | - VMX_EPT_EXECUTE_ONLY_BIT; + VMX_EPT_EXECUTE_ONLY_BIT | + VMX_EPT_ADVANCED_VMEXIT_INFO_BIT; msrs->ept_caps &= ept_caps; msrs->ept_caps |= VMX_EPT_EXTENT_GLOBAL_BIT | -- 2.54.0