FAILED: patch "[PATCH] KVM: TDX: Don't assume exit_reason[31:16] is all-0 in" failed to apply to 6.18-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x bc335ce04408750585b4b32f248c543c9493d545
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026110444-external-riverbed-0f47@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From bc335ce04408750585b4b32f248c543c9493d545 Mon Sep 17 00:00:00 2001
From: Xiaoyao Li <[email protected]>
Date: Wed, 19 Aug 2026 17:48:58 +0800
Subject: [PATCH] KVM: TDX: Don't assume exit_reason[31:16] is all-0 in
tdx_to_vmx_exit_reason()
When handling the real Exit Reason, don't assume the upper 16 bits as all-0 in tdx_to_vmx_exit_reason(), in preparation for enabling Bus Lock VM exit.
When Bus Lock VM exit is enabled, the bit 26 of Exit Reason becomes valid and it can be 1 with various exit reasons. Change the logic in tdx_to_vmx_exit_reason() to check the 'basic' Exit Reason for correctness. Also preserve bit[31:16] when changing the (basic) Exit Reason, to not lose the information in bit[31:16].
Change the return type of tdx_to_vmx_exit_reason() to "union vmx_exit_reason" for the convenience of manipulating the basic field.
arch/x86/kvm/vmx/tdx.c +14 -10
@@ -935,10 +935,10 @@ static __always_inline bool tdx_is_exit_reason_valid(u64 vp_enter_ret) } } -static __always_inline u32 tdx_to_vmx_exit_reason(struct kvm_vcpu *vcpu) +static __always_inline union vmx_exit_reason tdx_to_vmx_exit_reason(struct kvm_vcpu *vcpu) {struct vcpu_tdx *tdx =to_tdx (vcpu); -u32 exit_reason; +union vmx_exit_reason exit_reason;/* * Return the synthesized invalid Exit Reason, as the TDX module
@@ -946,22 +946,26 @@ static __always_inline u32 tdx_to_vmx_exit_reason(struct kvm_vcpu *vcpu)* but this is NOT a failed VM-Enter. */ if (!tdx_is_exit_reason_valid (tdx->vp_enter_ret)) -return EXIT_REASON_UNDEFINED ; +return (union vmx_exit_reason ) { + .basic =EXIT_REASON_UNDEFINED , + }; - exit_reason = tdx->vp_enter_ret; + exit_reason.full = (u32 )tdx->vp_enter_ret; -switch (exit_reason) { +switch (exit_reason.basic) {case EXIT_REASON_TDCALL :if (tdvmcall_exit_type (vcpu)) -return EXIT_REASON_VMCALL ; - -return tdcall_to_vmx_exit_reason (vcpu); + exit_reason.basic =EXIT_REASON_VMCALL ; +else + exit_reason.basic =tdcall_to_vmx_exit_reason (vcpu); +break ;case EXIT_REASON_EPT_MISCONFIG :/* * Defer KVM_BUG_ON() until tdx_handle_exit() because this is in * non-instrumentable code with interrupts disabled. */ -return EXIT_REASON_UNDEFINED ; + exit_reason.basic =EXIT_REASON_UNDEFINED ; +break ;default :break ; }
@@ -978,7 +982,7 @@ static noinstr void tdx_vcpu_enter_exit(struct kvm_vcpu *vcpu) tdx->vp_enter_ret =tdh_vp_enter (&tdx->vp, &tdx->vp_enter_args); - vt->exit_reason.full =tdx_to_vmx_exit_reason (vcpu); + vt->exit_reason =tdx_to_vmx_exit_reason (vcpu); vt->exit_qualification = tdx->vp_enter_args.rcx; tdx->ext_exit_qualification = tdx->vp_enter_args.rdx;
Sasha Levin
maintainerPATCH 1/1 KVM: TDX: Don't assume exit_reason[31:16] is all-0 in tdx_to_vmx_exit_reason()
From: Xiaoyao Li <[email protected]>
[ Upstream commit bc335ce04408750585b4b32f248c543c9493d545 ]
When handling the real Exit Reason, don't assume the upper 16 bits as all-0 in tdx_to_vmx_exit_reason(), in preparation for enabling Bus Lock VM exit.
When Bus Lock VM exit is enabled, the bit 26 of Exit Reason becomes valid and it can be 1 with various exit reasons. Change the logic in tdx_to_vmx_exit_reason() to check the 'basic' Exit Reason for correctness. Also preserve bit[31:16] when changing the (basic) Exit Reason, to not lose the information in bit[31:16].
Change the return type of tdx_to_vmx_exit_reason() to "union vmx_exit_reason" for the convenience of manipulating the basic field.
---
Depends on <[email protected]>
arch/x86/kvm/vmx/tdx.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-)
arch/x86/kvm/vmx/tdx.c +14 -10
@@ -899,10 +899,10 @@ static __always_inline bool tdx_is_exit_reason_valid(u64 vp_enter_ret) } } -static __always_inline u32 tdx_to_vmx_exit_reason(struct kvm_vcpu *vcpu) +static __always_inline union vmx_exit_reason tdx_to_vmx_exit_reason(struct kvm_vcpu *vcpu) {struct vcpu_tdx *tdx =to_tdx (vcpu); -u32 exit_reason; +union vmx_exit_reason exit_reason;/* * Return the synthesized invalid Exit Reason, as the TDX module
@@ -910,22 +910,26 @@ static __always_inline u32 tdx_to_vmx_exit_reason(struct kvm_vcpu *vcpu)* but this is NOT a failed VM-Enter. */ if (!tdx_is_exit_reason_valid (tdx->vp_enter_ret)) -return EXIT_REASON_UNDEFINED ; +return (union vmx_exit_reason ) { + .basic =EXIT_REASON_UNDEFINED , + }; - exit_reason = tdx->vp_enter_ret; + exit_reason.full = (u32 )tdx->vp_enter_ret; -switch (exit_reason) { +switch (exit_reason.basic) {case EXIT_REASON_TDCALL :if (tdvmcall_exit_type (vcpu)) -return EXIT_REASON_VMCALL ; - -return tdcall_to_vmx_exit_reason (vcpu); + exit_reason.basic =EXIT_REASON_VMCALL ; +else + exit_reason.basic =tdcall_to_vmx_exit_reason (vcpu); +break ;case EXIT_REASON_EPT_MISCONFIG :/* * Defer KVM_BUG_ON() until tdx_handle_exit() because this is in * non-instrumentable code with interrupts disabled. */ -return EXIT_REASON_UNDEFINED ; + exit_reason.basic =EXIT_REASON_UNDEFINED ; +break ;default :break ; }
@@ -942,7 +946,7 @@ static noinstr void tdx_vcpu_enter_exit(struct kvm_vcpu *vcpu) tdx->vp_enter_ret =tdh_vp_enter (&tdx->vp, &tdx->vp_enter_args); - vt->exit_reason.full =tdx_to_vmx_exit_reason (vcpu); + vt->exit_reason =tdx_to_vmx_exit_reason (vcpu); vt->exit_qualification = tdx->vp_enter_args.rcx; tdx->ext_exit_qualification = tdx->vp_enter_args.rdx;
Signature · 1 line
2.53.0