Patch "x86/kvm: Update spectre-v1 mitigation" has been added to the 4.14-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
x86/kvm: Update spectre-v1 mitigation
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x86kvm_Update_spectre-v1_mitigation.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Subject: x86/kvm: Update spectre-v1 mitigation
From: Dan Williams [email protected]
Date: Wed Jan 31 17:47:03 2018 -0800
From: Dan Williams [email protected]
commit 085331dfc6bbe3501fb936e657331ca943827600
Commit 75f139aaf896 "KVM: x86: Add memory barrier on vmcs field lookup" added a raw 'asm("lfence");' to prevent a bounds check bypass of 'vmcs_field_to_offset_table'.
The lfence can be avoided in this path by using the array_index_nospec() helper designed for these types of fixes.
--- arch/x86/kvm/vmx.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
arch/x86/kvm/vmx.c +9 -11
@@ -34,6 +34,7 @@#include <linux/tboot.h> #include <linux/hrtimer.h> #include <linux/frame.h> +#include <linux/nospec.h> #include "kvm_cache_regs.h" #include "x86.h"
@@ -887,21 +888,18 @@ static const unsigned short vmcs_field_tstatic inline short vmcs_field_to_offset (unsigned long field) { -BUILD_BUG_ON (ARRAY_SIZE (vmcs_field_to_offset_table) >SHRT_MAX ); +const size_t size =ARRAY_SIZE (vmcs_field_to_offset_table); +unsigned short offset; -if (field >=ARRAY_SIZE (vmcs_field_to_offset_table)) +BUILD_BUG_ON (size >SHRT_MAX ); +if (field >= size)return -ENOENT ; -/* -* FIXME: Mitigation for CVE-2017-5753. To be replaced with a -* generic mechanism. -*/ - asm("lfence" ); - -if (vmcs_field_to_offset_table[field] ==0 ) + field =array_index_nospec (field, size); + offset = vmcs_field_to_offset_table[field]; +if (offset ==0 )return -ENOENT ; - -return vmcs_field_to_offset_table[field]; +return offset; }static inline struct vmcs12 *get_vmcs12 (struct kvm_vcpu *vcpu)
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/x86kvm_Update_spectre-v1_mitigation.patch queue-4.14/x86_Introduce_barrier_nospec.patch queue-4.14/x86get_user_Use_pointer_masking_to_limit_speculation.patch queue-4.14/x86_Introduce___uaccess_begin_nospec()_and_uaccess_try_nospec.patch queue-4.14/x86paravirt_Remove_noreplace-paravirt_cmdline_option.patch queue-4.14/KVM_VMX_Make_indirect_call_speculation_safe.patch queue-4.14/KVMVMX_Allow_direct_access_to_MSR_IA32_SPEC_CTRL.patch queue-4.14/array_index_nospec_Sanitize_speculative_array_de-references.patch queue-4.14/Documentation_Document_array_index_nospec.patch queue-4.14/KVMSVM_Allow_direct_access_to_MSR_IA32_SPEC_CTRL.patch queue-4.14/KVMx86_Add_IBPB_support.patch queue-4.14/x86_Implement_array_index_mask_nospec.patch queue-4.14/KVMVMX_Emulate_MSR_IA32_ARCH_CAPABILITIES.patch queue-4.14/nl80211_Sanitize_array_index_in_parse_txq_params.patch queue-4.14/KVM_x86_Make_indirect_calls_in_emulator_speculation_safe.patch queue-4.14/x86uaccess_Use___uaccess_begin_nospec()_and_uaccess_try_nospec.patch queue-4.14/x86usercopy_Replace_open_coded_stacclac_with___uaccess_begin_end.patch queue-4.14/vfs_fdtable_Prevent_bounds-check_bypass_via_speculative_execution.patch queue-4.14/x86spectre_Report_get_user_mitigation_for_spectre_v1.patch queue-4.14/x86syscall_Sanitize_syscall_table_de-references_under_speculation.patch