mirror of
https://github.com/torvalds/linux.git
synced 2026-09-27 02:22:02 +02:00
KVM: x86: Disallow EFER.LME and EFER.LMA if long mode is not supported
Remove EFER.LME and EFER.LMA from EFER reserved bits only if long mode is actually supported. KVM does check long-mode support before allowing the bits for guest writes and userspace writes through KVM_SET_SREGS* (in __kvm_valid_efer()), but userspace writes through KVM_SET_MSRS only check reserved bits. In practice, this doesn't really matter. The true motiviation is getting rid of the #ifdeffery when initializing efer_reserved_bits. Cc: stable@vger.kernel.org Signed-off-by: Yosry Ahmed <yosry@kernel.org> Link: https://patch.msgid.link/20260713181020.2735367-3-yosry@kernel.org Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
6ccc19d4c1
commit
e62392bf39
|
|
@ -19,16 +19,8 @@ bool __read_mostly report_ignored_msrs = true;
|
|||
module_param(report_ignored_msrs, bool, 0644);
|
||||
EXPORT_SYMBOL_FOR_KVM_INTERNAL(report_ignored_msrs);
|
||||
|
||||
/* EFER defaults:
|
||||
* - enable syscall per default because its emulated by KVM
|
||||
* - enable LME and LMA per default on 64 bit KVM
|
||||
*/
|
||||
#ifdef CONFIG_X86_64
|
||||
static
|
||||
u64 __read_mostly efer_reserved_bits = ~((u64)(EFER_SCE | EFER_LME | EFER_LMA));
|
||||
#else
|
||||
/* Enable syscall by default because its emulated by KVM */
|
||||
static u64 __read_mostly efer_reserved_bits = ~((u64)EFER_SCE);
|
||||
#endif
|
||||
|
||||
#define MAX_IO_MSRS 256
|
||||
|
||||
|
|
|
|||
|
|
@ -6910,6 +6910,9 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_setup_xss_caps);
|
|||
|
||||
static void kvm_setup_efer_caps(void)
|
||||
{
|
||||
if (kvm_cpu_cap_has(X86_FEATURE_LM))
|
||||
kvm_enable_efer_bits(EFER_LME | EFER_LMA);
|
||||
|
||||
if (kvm_cpu_cap_has(X86_FEATURE_NX))
|
||||
kvm_enable_efer_bits(EFER_NX);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user