File tree Expand file tree Collapse file tree 1 file changed +9
-11
lines changed Expand file tree Collapse file tree 1 file changed +9
-11
lines changed Original file line number Diff line number Diff line change 34
34
#include <linux/tboot.h>
35
35
#include <linux/hrtimer.h>
36
36
#include <linux/frame.h>
37
+ #include <linux/nospec.h>
37
38
#include "kvm_cache_regs.h"
38
39
#include "x86.h"
39
40
@@ -898,21 +899,18 @@ static const unsigned short vmcs_field_to_offset_table[] = {
898
899
899
900
static inline short vmcs_field_to_offset (unsigned long field )
900
901
{
901
- BUILD_BUG_ON (ARRAY_SIZE (vmcs_field_to_offset_table ) > SHRT_MAX );
902
+ const size_t size = ARRAY_SIZE (vmcs_field_to_offset_table );
903
+ unsigned short offset ;
902
904
903
- if (field >= ARRAY_SIZE (vmcs_field_to_offset_table ))
905
+ BUILD_BUG_ON (size > SHRT_MAX );
906
+ if (field >= size )
904
907
return - ENOENT ;
905
908
906
- /*
907
- * FIXME: Mitigation for CVE-2017-5753. To be replaced with a
908
- * generic mechanism.
909
- */
910
- asm("lfence" );
911
-
912
- if (vmcs_field_to_offset_table [field ] == 0 )
909
+ field = array_index_nospec (field , size );
910
+ offset = vmcs_field_to_offset_table [field ];
911
+ if (offset == 0 )
913
912
return - ENOENT ;
914
-
915
- return vmcs_field_to_offset_table [field ];
913
+ return offset ;
916
914
}
917
915
918
916
static inline struct vmcs12 * get_vmcs12 (struct kvm_vcpu * vcpu )
You can’t perform that action at this time.
0 commit comments