FAILED: patch "[PATCH] KVM: VMX: Don't use vcpu->run->internal.ndata as an array" failed to apply to 5.11-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.11-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 04c4f2ee3f68c9a4bf1653d15f1a9a435ae33f7a Mon Sep 17 00:00:00 2001
From: Reiji Watanabe <[email protected]>
Date: Tue, 13 Apr 2021 15:47:40 +0000
Subject: [PATCH] KVM: VMX: Don't use vcpu->run->internal.ndata as an array
index
__vmx_handle_exit() uses vcpu->run->internal.ndata as an index for an array access. Since vcpu->run is (can be) mapped to a user address space with a writer permission, the 'ndata' could be updated by the user process at anytime (the user process can set it to outside the bounds of the array).
So, it is not safe that __vmx_handle_exit() uses the 'ndata' that way.
Message-Id: <[email protected]>
arch/x86/kvm/vmx/vmx.c +5 -5
@@ -6027,19 +6027,19 @@ static int __vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath) exit_reason.basic != EXIT_REASON_PML_FULL && exit_reason.basic != EXIT_REASON_APIC_ACCESS && exit_reason.basic != EXIT_REASON_TASK_SWITCH)) { +int ndata =3 ; + vcpu->run->exit_reason =KVM_EXIT_INTERNAL_ERROR ; vcpu->run->internal.suberror =KVM_INTERNAL_ERROR_DELIVERY_EV ; - vcpu->run->internal.ndata =3 ; vcpu->run->internal.data[0 ] = vectoring_info; vcpu->run->internal.data[1 ] = exit_reason.full; vcpu->run->internal.data[2 ] = vcpu->arch.exit_qualification;if (exit_reason.basic ==EXIT_REASON_EPT_MISCONFIG ) { - vcpu->run->internal.ndata++; - vcpu->run->internal.data[3 ] = + vcpu->run->internal.data[ndata++] =vmcs_read64 (GUEST_PHYSICAL_ADDRESS ); } - vcpu->run->internal.data[vcpu->run->internal.ndata++] = - vcpu->arch.last_vmentry_cpu; + vcpu->run->internal.data[ndata++] = vcpu->arch.last_vmentry_cpu; + vcpu->run->internal.ndata = ndata;return 0 ; }
Sasha Levin
maintainerQuoted 25 lines · On Sun, Apr 18, 2021 at 12:34:36PM +0200, [email protected] wrote:
The patch below does not apply to the 5.11-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
04c4f2ee3f68c9a4bf1653d15f1a9a435ae33f7aMon Sep 17 00:00:00 2001
From: Reiji Watanabe <[email protected]>
Date: Tue, 13 Apr 2021 15:47:40 +0000
Subject: [PATCH] KVM: VMX: Don't usevcpu->run->internal.ndataas an array index
__vmx_handle_exit()usesvcpu->run->internal.ndataas an index for an array access. Sincevcpu->runis (can be) mapped to a user address space with a writer permission, the 'ndata' could be updated by the user process at anytime (the user process can set it to outside the bounds of the array).
So, it is not safe that__vmx_handle_exit()uses the 'ndata' that way.
Quoted 6 lines
Fixes 1aa561b1a4c0 ("kvm: x86: Add "last CPU" to some KVM_EXIT information")Signed-off-by Reiji Watanabe <[email protected]>Reviewed-by Jim Mattson <[email protected]>Message-Id: <[email protected]>
Signed-off-by Paolo Bonzini <[email protected]>
I've resolved this by taking 8e5332402164 ("KVM: VMX: Convert vcpu_vmx.exit_reason to a union").
Signature · 2 lines
Thanks, Sasha