CVE-2023-53663 PUBLISHED

KVM: nSVM: Check instead of asserting on nested TSC scaling support

Assigner: Linux
Reserved: 07.10.2025 Published: 07.10.2025 Updated: 07.10.2025

In the Linux kernel, the following vulnerability has been resolved:

KVM: nSVM: Check instead of asserting on nested TSC scaling support

Check for nested TSC scaling support on nested SVM VMRUN instead of asserting that TSC scaling is exposed to L1 if L1's MSR_AMD64_TSC_RATIO has diverged from KVM's default. Userspace can trigger the WARN at will by writing the MSR and then updating guest CPUID to hide the feature (modifying guest CPUID is allowed anytime before KVM_RUN). E.g. hacking KVM's state_test selftest to do

<pre> vcpu_set_msr(vcpu, MSR_AMD64_TSC_RATIO, 0); vcpu_clear_cpuid_feature(vcpu, X86_FEATURE_TSCRATEMSR); </pre>

after restoring state in a new VM+vCPU yields an endless supply of:

------------[ cut here ]------------ WARNING: CPU: 164 PID: 62565 at arch/x86/kvm/svm/nested.c:699 nested_vmcb02_prepare_control+0x3d6/0x3f0 [kvm_amd] Call Trace: <TASK> enter_svm_guest_mode+0x114/0x560 [kvm_amd] nested_svm_vmrun+0x260/0x330 [kvm_amd] vmrun_interception+0x29/0x30 [kvm_amd] svm_invoke_exit_handler+0x35/0x100 [kvm_amd] svm_handle_exit+0xe7/0x180 [kvm_amd] kvm_arch_vcpu_ioctl_run+0x1eab/0x2570 [kvm] kvm_vcpu_ioctl+0x4c9/0x5b0 [kvm] __se_sys_ioctl+0x7a/0xc0 __x64_sys_ioctl+0x21/0x30 do_syscall_64+0x41/0x90 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x45ca1b

Note, the nested #VMEXIT path has the same flaw, but needs a different fix and will be handled separately.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 5228eb96a4875f8cf5d61d486e3795ac14df8904 to 6c1ecfea1daf6e75c46e295aad99dfbafd878897 (excl.)
  • affected from 5228eb96a4875f8cf5d61d486e3795ac14df8904 to 02b24270568f65dd607c4a848512dc8055b4491b (excl.)
  • affected from 5228eb96a4875f8cf5d61d486e3795ac14df8904 to 7cafe9b8e22bb3d77f130c461aedf6868c4aaf58 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 5.16 is affected
  • unaffected from 0 to 5.16 (excl.)
  • unaffected from 6.1.54 to 6.1.* (incl.)
  • unaffected from 6.5.4 to 6.5.* (incl.)
  • unaffected from 6.6 to * (incl.)

References