linux/arch/x86/entry
Pawan Gupta bd57853b86 x86/its: Align RETs in BHB clear sequence to avoid thunking
commit f0cd7091cc upstream.

The software mitigation for BHI is to execute BHB clear sequence at syscall
entry, and possibly after a cBPF program. ITS mitigation thunks RETs in the
lower half of the cacheline. This causes the RETs in the BHB clear sequence
to be thunked as well, adding unnecessary branches to the BHB clear
sequence.

Since the sequence is in hot path, align the RET instructions in the
sequence to avoid thunking.

This is how disassembly clear_bhb_loop() looks like after this change:

   0x44 <+4>:     mov    $0x5,%ecx
   0x49 <+9>:     call   0xffffffff81001d9b <clear_bhb_loop+91>
   0x4e <+14>:    jmp    0xffffffff81001de5 <clear_bhb_loop+165>
   0x53 <+19>:    int3
   ...
   0x9b <+91>:    call   0xffffffff81001dce <clear_bhb_loop+142>
   0xa0 <+96>:    ret
   0xa1 <+97>:    int3
   ...
   0xce <+142>:   mov    $0x5,%eax
   0xd3 <+147>:   jmp    0xffffffff81001dd6 <clear_bhb_loop+150>
   0xd5 <+149>:   nop
   0xd6 <+150>:   sub    $0x1,%eax
   0xd9 <+153>:   jne    0xffffffff81001dd3 <clear_bhb_loop+147>
   0xdb <+155>:   sub    $0x1,%ecx
   0xde <+158>:   jne    0xffffffff81001d9b <clear_bhb_loop+91>
   0xe0 <+160>:   ret
   0xe1 <+161>:   int3
   0xe2 <+162>:   int3
   0xe3 <+163>:   int3
   0xe4 <+164>:   int3
   0xe5 <+165>:   lfence
   0xe8 <+168>:   pop    %rbp
   0xe9 <+169>:   ret

Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-05-18 08:24:59 +02:00
..
syscalls uretprobe: change syscall number, again 2024-08-02 15:18:49 +02:00
vdso random: vDSO: add a __vdso_getrandom prototype for all architectures 2024-09-13 17:28:35 +02:00
vsyscall x86/mm: Remove broken vsyscall emulation code from the page fault code 2024-05-01 09:41:43 +02:00
calling.h x86/entry: Fix ORC unwinder for PUSH_REGS with save_ret=1 2025-04-10 14:39:20 +02:00
common.c x86/entry: Add __init to ia32_emulation_override_cmdline() 2025-04-10 14:39:12 +02:00
entry.S x86/bugs: Use SBPB in write_ibpb() if applicable 2025-05-02 07:59:24 +02:00
entry_32.S x86/entry_32: Clear CPU buffers after register restore in NMI return 2024-10-08 15:16:28 -07:00
entry_64.S x86/its: Align RETs in BHB clear sequence to avoid thunking 2025-05-18 08:24:59 +02:00
entry_64_compat.S x86/bhi: Avoid warning in #DB handler due to BHI mitigation 2024-07-03 13:26:30 +02:00
entry_64_fred.S x86/entry: Add fred_entry_from_kvm() for VMX to handle IRQ/NMI 2024-01-31 22:03:16 +01:00
entry_fred.c x86/irq: Install posted MSI notification handler 2024-04-30 00:54:42 +02:00
Makefile x86/entry: Merge thunk_64.S and thunk_32.S into thunk.S 2024-04-09 09:57:56 +02:00
syscall_32.c x86/syscall: Mark exit[_group] syscall handlers __noreturn 2024-06-28 15:23:38 +02:00
syscall_64.c x86/syscall: Mark exit[_group] syscall handlers __noreturn 2024-06-28 15:23:38 +02:00
syscall_x32.c x86/syscall: Mark exit[_group] syscall handlers __noreturn 2024-06-28 15:23:38 +02:00
thunk.S x86/entry: Merge thunk_64.S and thunk_32.S into thunk.S 2024-04-09 09:57:56 +02:00