Print this page
11787 Kernel needs to be built with retpolines
11788 Kernel needs to generally use RSB stuffing
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: John Levon <john.levon@joyent.com>

*** 545,554 **** --- 545,562 ---- #define IA32_PKG_THERM_INTTERUPT_TR1_IE 0x00008000 #define IA32_PKG_THERM_INTTERUPT_TR2_VAL(x) (((x) >> 16) & 0x7f) #define IA32_PKG_THERM_INTERRUPT_TR2_IE 0x00800000 #define IA32_PKG_THERM_INTERRUPT_PL_NE 0x01000000 + /* + * This MSR exists on families, 10h, 12h+ for AMD. This controls instruction + * decoding. Most notably, for the AMD variant of retpolines, we must improve + * the serializability of lfence for the lfence based method to work. + */ + #define MSR_AMD_DECODE_CONFIG 0xc0011029 + #define AMD_DECODE_CONFIG_LFENCE_DISPATCH 0x02 + #define MCI_CTL_VALUE 0xffffffff #define MTRR_TYPE_UC 0 #define MTRR_TYPE_WC 1 #define MTRR_TYPE_WT 4
*** 976,986 **** #define INTC_MODEL_BROADWELL 0x3d #define INTC_MODEL_BROADELL_2 0x47 #define INTC_MODEL_BROADWELL_XEON 0x4f #define INTC_MODEL_BROADWELL_XEON_D 0x56 ! #define INCC_MODEL_SKYLAKE_MOBILE 0x4e #define INTC_MODEL_SKYLAKE_XEON 0x55 #define INTC_MODEL_SKYLAKE_DESKTOP 0x5e #define INTC_MODEL_KABYLAKE_MOBILE 0x8e #define INTC_MODEL_KABYLAKE_DESKTOP 0x9e --- 984,994 ---- #define INTC_MODEL_BROADWELL 0x3d #define INTC_MODEL_BROADELL_2 0x47 #define INTC_MODEL_BROADWELL_XEON 0x4f #define INTC_MODEL_BROADWELL_XEON_D 0x56 ! #define INTC_MODEL_SKYLAKE_MOBILE 0x4e #define INTC_MODEL_SKYLAKE_XEON 0x55 #define INTC_MODEL_SKYLAKE_DESKTOP 0x5e #define INTC_MODEL_KABYLAKE_MOBILE 0x8e #define INTC_MODEL_KABYLAKE_DESKTOP 0x9e
*** 1053,1078 **** extern uint_t pentiumpro_bug4046376; extern const char CyrixInstead[]; extern void (*spec_uarch_flush)(void); #endif #if defined(_KERNEL) /* - * x86_md_clear is the main entry point that should be called to deal with - * clearing u-arch buffers. Implementations are below because they're - * implemented in ASM. They shouldn't be used. - */ - extern void (*x86_md_clear)(void); - extern void x86_md_clear_noop(void); - extern void x86_md_clear_verw(void); - - /* * This structure is used to pass arguments and get return values back * from the CPUID instruction in __cpuid_insn() routine. */ struct cpuid_regs { uint32_t cp_eax; --- 1061,1083 ---- extern uint_t pentiumpro_bug4046376; extern const char CyrixInstead[]; + /* + * These functions are all used to perform various side-channel mitigations. + * Please see uts/i86pc/os/cpuid.c for more information. + */ extern void (*spec_uarch_flush)(void); + extern void x86_rsb_stuff(void); + extern void x86_md_clear(void); #endif #if defined(_KERNEL) /* * This structure is used to pass arguments and get return values back * from the CPUID instruction in __cpuid_insn() routine. */ struct cpuid_regs { uint32_t cp_eax;