FAILED: patch "[PATCH] KVM: x86: Protect exit_reason from being used in" failed to apply to 5.5-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.5-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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From c926f2f7230b1a29e31914b51db680f8cbf3103f Mon Sep 17 00:00:00 2001
From: Marios Pomonis <[email protected]>
Date: Wed, 11 Dec 2019 12:47:51 -0800
Subject: [PATCH] KVM: x86: Protect exit_reason from being used in
Spectre-v1/L1TF attacks
This fixes a Spectre-v1/L1TF vulnerability in vmx_handle_exit(). While exit_reason is set by the hardware and therefore should not be attacker-influenced, an unknown exit_reason could potentially be used to perform such an attack.
arch/x86/kvm/vmx/vmx.c +32 -25
@@ -5913,34 +5913,41 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu,if (exit_fastpath ==EXIT_FASTPATH_SKIP_EMUL_INS ) {kvm_skip_emulated_instruction (vcpu);return 1 ; - }else if (exit_reason < kvm_vmx_max_exit_handlers - && kvm_vmx_exit_handlers[exit_reason]) { + } + +if (exit_reason >= kvm_vmx_max_exit_handlers) + goto unexpected_vmexit;#ifdef CONFIG_RETPOLINE -if (exit_reason ==EXIT_REASON_MSR_WRITE ) -return kvm_emulate_wrmsr (vcpu); -else if (exit_reason ==EXIT_REASON_PREEMPTION_TIMER ) -return handle_preemption_timer (vcpu); -else if (exit_reason ==EXIT_REASON_INTERRUPT_WINDOW ) -return handle_interrupt_window (vcpu); -else if (exit_reason ==EXIT_REASON_EXTERNAL_INTERRUPT ) -return handle_external_interrupt (vcpu); -else if (exit_reason ==EXIT_REASON_HLT ) -return kvm_emulate_halt (vcpu); -else if (exit_reason ==EXIT_REASON_EPT_MISCONFIG ) -return handle_ept_misconfig (vcpu); +if (exit_reason ==EXIT_REASON_MSR_WRITE ) +return kvm_emulate_wrmsr (vcpu); +else if (exit_reason ==EXIT_REASON_PREEMPTION_TIMER ) +return handle_preemption_timer (vcpu); +else if (exit_reason ==EXIT_REASON_INTERRUPT_WINDOW ) +return handle_interrupt_window (vcpu); +else if (exit_reason ==EXIT_REASON_EXTERNAL_INTERRUPT ) +return handle_external_interrupt (vcpu); +else if (exit_reason ==EXIT_REASON_HLT ) +return kvm_emulate_halt (vcpu); +else if (exit_reason ==EXIT_REASON_EPT_MISCONFIG ) +return handle_ept_misconfig (vcpu);#endif -return kvm_vmx_exit_handlers[exit_reason](vcpu); - }else { -vcpu_unimpl (vcpu,"vmx: unexpected exit reason 0x%x\n" , - exit_reason); -dump_vmcs (); - vcpu->run->exit_reason =KVM_EXIT_INTERNAL_ERROR ; - vcpu->run->internal.suberror = + + exit_reason =array_index_nospec (exit_reason, + kvm_vmx_max_exit_handlers); +if (!kvm_vmx_exit_handlers[exit_reason]) + goto unexpected_vmexit; + +return kvm_vmx_exit_handlers[exit_reason](vcpu); + +unexpected_vmexit: +vcpu_unimpl (vcpu,"vmx: unexpected exit reason 0x%x\n" , exit_reason); +dump_vmcs (); + vcpu->run->exit_reason =KVM_EXIT_INTERNAL_ERROR ; + vcpu->run->internal.suberror =KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON ; - vcpu->run->internal.ndata =1 ; - vcpu->run->internal.data[0 ] = exit_reason; -return 0 ; - } + vcpu->run->internal.ndata =1 ; + vcpu->run->internal.data[0 ] = exit_reason; +return 0 ; }/*
Sasha Levin
maintainerQuoted 23 lines · On Sun, Feb 09, 2020 at 01:33:07PM +0100, [email protected] wrote:
The patch below does not apply to the 5.5-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]>.thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
c926f2f7230b1a29e31914b51db680f8cbf3103fMon Sep 17 00:00:00 2001
From: Marios Pomonis <[email protected]>
Date: Wed, 11 Dec 2019 12:47:51 -0800
Subject: [PATCH] KVM: x86: Protectexit_reasonfrom being used in Spectre-v1/L1TF attacksThis fixes a Spectre-v1/L1TF vulnerability in
vmx_handle_exit(). Whileexit_reasonis set by the hardware and therefore should not be attacker-influenced, an unknownexit_reasoncould potentially be used to perform such an attack.
Quoted 8 lines
Fixes 55d2375e58a6 ("KVM: nVMX: Move nested code to dedicated files")Signed-off-by Marios Pomonis <[email protected]>Signed-off-by Nick Finco <[email protected]>Suggested-by Sean Christopherson <[email protected]>Reviewed-by Andrew Honig <[email protected]>Signed-off-by Paolo Bonzini <[email protected]>
The conflict in 5.5 was because we didn't have 1e9e2622a149 ("KVM: VMX:
FIXED+PHYSICAL mode single target IPI fastpath"), I've fixed it and queued it up.
Backports for older kernels are still missing.
Signature · 2 lines
Thanks, Sasha