On 10/8/24 23:11, Borislav Petkov wrote: >> .macro CLEAR_CPU_BUFFERS >> - ALTERNATIVE "", __stringify(verw _ASM_RIP(mds_verw_sel)), X86_FEATURE_CLEAR_CPU_BUF >> +#ifdef CONFIG_X86_64 >> + ALTERNATIVE "", "verw mds_verw_sel(%rip)", X86_FEATURE_CLEAR_CPU_BUF >> +#else >> + /* >> + * In 32bit mode, the memory operand must be a %cs reference. The data >> + * segments may not be usable (vm86 mode), and the stack segment may not >> + * be flat (ESPFIX32). >> + */ >> + ALTERNATIVE "", "verw %cs:mds_verw_sel", X86_FEATURE_CLEAR_CPU_BUF >> +#endif > So why didn't we ifdef the "verw mds_verw_sel(%rip)" and "verw > %cs:mds_verw_sel" macro argument instead of adding more bigger ugly ifdeffery? I'm not jumping for joy about how it looks, but I applied it because it's good enough and the regression was about to get its driver's license. ;) I did spend some time noodling to come up with _some_ common 32/64-bit implementation, but 32-bit is just too special of a snowflake.