linux/arch/x86
Peter Zijlstra ee88d363d1 x86,static_call: Use alternative RET encoding
In addition to teaching static_call about the new way to spell 'RET',
there is an added complication in that static_call() is allowed to
rewrite text before it is known which particular spelling is required.

In order to deal with this; have a static_call specific fixup in the
apply_return() 'alternative' patching routine that will rewrite the
static_call trampoline to match the definite sequence.

This in turn creates the problem of uniquely identifying static call
trampolines. Currently trampolines are 8 bytes, the first 5 being the
jmp.d32/ret sequence and the final 3 a byte sequence that spells out
'SCT'.

This sequence is used in __static_call_validate() to ensure it is
patching a trampoline and not a random other jmp.d32. That is,
false-positives shouldn't be plenty, but aren't a big concern.

OTOH the new __static_call_fixup() must not have false-positives, and
'SCT' decodes to the somewhat weird but semi plausible sequence:

  push %rbx
  rex.XB push %r12

Additionally, there are SLS concerns with immediate jumps. Combined it
seems like a good moment to change the signature to a single 3 byte
trap instruction that is unique to this usage and will not ever get
generated by accident.

As such, change the signature to: '0x0f, 0xb9, 0xcc', which decodes
to:

  ud1 %esp, %ecx

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
2022-06-27 10:33:58 +02:00
..
boot Follow-up tweaks for the EFI changes in v5.19 2022-06-03 13:39:30 -07:00
coco x86/tdx: Handle load_unaligned_zeropad() page-cross to a shared page 2022-06-17 15:37:33 -07:00
configs x86/config: Make the x86 defconfigs a bit more usable 2022-03-27 20:58:35 +02:00
crypto crypto: x86 - eliminate anonymous module_init & module_exit 2022-04-08 16:13:31 +08:00
entry kernel-hardening updates for v5.19-rc1 2022-05-24 12:27:09 -07:00
events Two small perf updates: 2022-06-05 10:40:31 -07:00
hyperv x86/Hyper-V: Add SEV negotiate protocol support in Isolation VM 2022-06-15 18:27:40 +00:00
ia32 x86: Remove a.out support 2022-04-11 18:04:27 +02:00
include x86,static_call: Use alternative RET encoding 2022-06-27 10:33:58 +02:00
kernel x86,static_call: Use alternative RET encoding 2022-06-27 10:33:58 +02:00
kvm x86/kvm/vmx: Make noinstr clean 2022-06-27 10:33:58 +02:00
lib x86/retpoline: Use -mfunction-return 2022-06-27 10:33:58 +02:00
math-emu x86/32: Remove lazy GS macros 2022-04-14 14:09:43 +02:00
mm virtio: replace arch_has_restricted_virtio_memory_access() 2022-06-06 08:22:01 +02:00
net x86/retpoline: Cleanup some #ifdefery 2022-06-27 10:33:58 +02:00
pci x86/PCI: Revert "x86/PCI: Clip only host bridge windows for E820 regions" 2022-06-17 14:24:14 -05:00
platform arch/x86: replace cpumask_weight with cpumask_empty where appropriate 2022-06-03 06:52:57 -07:00
power x86/cpu: Load microcode during restore_processor_state() 2022-04-19 19:37:05 +02:00
purgatory
ras
realmode Intel Trust Domain Extensions 2022-05-23 17:51:12 -07:00
tools
um um: Fix out-of-bounds read in LDT setup 2022-05-27 09:03:41 +02:00
video
virt/vmx/tdx x86/tdx: Provide common base for SEAMCALL and TDCALL C wrappers 2022-04-07 08:27:50 -07:00
xen xen/virtio: Enable restricted memory access using Xen grant mappings 2022-06-06 16:07:30 +02:00
.gitignore
Kbuild
Kconfig virtio: replace arch_has_restricted_virtio_memory_access() 2022-06-06 08:22:01 +02:00
Kconfig.assembler
Kconfig.cpu
Kconfig.debug x86/Kconfig: Fix indentation of arch/x86/Kconfig.debug 2022-05-25 15:39:27 +02:00
Makefile x86/retpoline: Use -mfunction-return 2022-06-27 10:33:58 +02:00
Makefile_32.cpu
Makefile.um