summaryrefslogtreecommitdiffstats
path: root/tools/include/nolibc/time.h
diff options
context:
space:
mode:
authorAlexandru Matei <alexandru.matei@uipath.com>2023-01-24 00:12:08 +0200
committerSean Christopherson <seanjc@google.com>2023-02-07 09:02:50 -0800
commit93827a0a36396f2fd6368a54a020f420c8916e9b (patch)
tree0c313e66b0a8ec01f756cdbc4dcdf5c6b5e452d0 /tools/include/nolibc/time.h
parent496c917b0989a7a20f9804de14ab2b3cbd6747a1 (diff)
downloadlinux-stable-93827a0a36396f2fd6368a54a020f420c8916e9b.tar.gz
linux-stable-93827a0a36396f2fd6368a54a020f420c8916e9b.tar.bz2
linux-stable-93827a0a36396f2fd6368a54a020f420c8916e9b.zip
KVM: VMX: Fix crash due to uninitialized current_vmcs
KVM enables 'Enlightened VMCS' and 'Enlightened MSR Bitmap' when running as a nested hypervisor on top of Hyper-V. When MSR bitmap is updated, evmcs_touch_msr_bitmap function uses current_vmcs per-cpu variable to mark that the msr bitmap was changed. vmx_vcpu_create() modifies the msr bitmap via vmx_disable_intercept_for_msr -> vmx_msr_bitmap_l01_changed which in the end calls this function. The function checks for current_vmcs if it is null but the check is insufficient because current_vmcs is not initialized. Because of this, the code might incorrectly write to the structure pointed by current_vmcs value left by another task. Preemption is not disabled, the current task can be preempted and moved to another CPU while current_vmcs is accessed multiple times from evmcs_touch_msr_bitmap() which leads to crash. The manipulation of MSR bitmaps by callers happens only for vmcs01 so the solution is to use vmx->vmcs01.vmcs instead of current_vmcs. BUG: kernel NULL pointer dereference, address: 0000000000000338 PGD 4e1775067 P4D 0 Oops: 0002 [#1] PREEMPT SMP NOPTI ... RIP: 0010:vmx_msr_bitmap_l01_changed+0x39/0x50 [kvm_intel] ... Call Trace: vmx_disable_intercept_for_msr+0x36/0x260 [kvm_intel] vmx_vcpu_create+0xe6/0x540 [kvm_intel] kvm_arch_vcpu_create+0x1d1/0x2e0 [kvm] kvm_vm_ioctl_create_vcpu+0x178/0x430 [kvm] kvm_vm_ioctl+0x53f/0x790 [kvm] __x64_sys_ioctl+0x8a/0xc0 do_syscall_64+0x5c/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd Fixes: ceef7d10dfb6 ("KVM: x86: VMX: hyper-v: Enlightened MSR-Bitmap support") Cc: stable@vger.kernel.org Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Alexandru Matei <alexandru.matei@uipath.com> Link: https://lore.kernel.org/r/20230123221208.4964-1-alexandru.matei@uipath.com Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'tools/include/nolibc/time.h')
0 files changed, 0 insertions, 0 deletions