Pull x86 core updates from Borislav Petkov: - Add the call depth tracking mitigation for Retbleed which has been long in the making. It is a lighterweight software-only fix for Skylake-based cores where enabling IBRS is a big hammer and causes a significant performance impact. What it basically does is, it aligns all kernel functions to 16 bytes boundary and adds a 16-byte padding before the function, objtool collects all functions' locations and when the mitigation gets applied, it patches a call accounting thunk which is used to track the call depth of the stack at any time. When that call depth reaches a magical, microarchitecture-specific value for the Return Stack Buffer, the code stuffs that RSB and avoids its underflow which could otherwise lead to the Intel variant of Retbleed. This software-only solution brings a lot of the lost performance back, as benchmarks suggest: https://lore.kernel.org/all/20220915111039.092790446@infradead.org/ That page above also contains a lot more detailed explanation of the whole mechanism - Implement a new control flow integrity scheme called FineIBT which is based on the software kCFI implementation and uses hardware IBT support where present to annotate and track indirect branches using a hash to validate them - Other misc fixes and cleanups * tag 'x86_core_for_v6.2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (80 commits) x86/paravirt: Use common macro for creating simple asm paravirt functions x86/paravirt: Remove clobber bitmask from .parainstructions x86/debug: Include percpu.h in debugreg.h to get DECLARE_PER_CPU() et al x86/cpufeatures: Move X86_FEATURE_CALL_DEPTH from bit 18 to bit 19 of word 11, to leave space for WIP X86_FEATURE_SGX_EDECCSSA bit x86/Kconfig: Enable kernel IBT by default x86,pm: Force out-of-line memcpy() objtool: Fix weak hole vs prefix symbol objtool: Optimize elf_dirty_reloc_sym() x86/cfi: Add boot time hash randomization x86/cfi: Boot time selection of CFI scheme x86/ibt: Implement FineIBT objtool: Add --cfi to generate the .cfi_sites section x86: Add prefix symbols for function padding objtool: Add option to generate prefix symbols objtool: Avoid O(bloody terrible) behaviour -- an ode to libelf objtool: Slice up elf_create_section_symbol() kallsyms: Revert "Take callthunks into account" x86: Unconfuse CONFIG_ and X86_FEATURE_ namespaces x86/retpoline: Fix crash printing warning x86/paravirt: Fix a !PARAVIRT build warning ...
Showing the changes to scripts (1 of 103 files). Show all
Unified · Split
| @@ -254,7 +254,9 @@ objtool := $(objtree)/tools/objtool/objtool · 253 unmodified lines | |||
| 254 | 254 | ||
| 255 | objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK) += --hacks=jump_label | 255 | objtool-args-$(CONFIG_HAVE_JUMP_LABEL_HACK) += --hacks=jump_label |
| 256 | objtool-args-$(CONFIG_HAVE_NOINSTR_HACK) += --hacks=noinstr | 256 | objtool-args-$(CONFIG_HAVE_NOINSTR_HACK) += --hacks=noinstr |
| 257 | objtool-args-$(CONFIG_CALL_DEPTH_TRACKING) += --hacks=skylake | ||
| 257 | objtool-args-$(CONFIG_X86_KERNEL_IBT) += --ibt | 258 | objtool-args-$(CONFIG_X86_KERNEL_IBT) += --ibt |
| 259 | objtool-args-$(CONFIG_FINEIBT) += --cfi | ||
| 258 | objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL) += --mcount | 260 | objtool-args-$(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL) += --mcount |
| 259 | objtool-args-$(CONFIG_UNWINDER_ORC) += --orc | 261 | objtool-args-$(CONFIG_UNWINDER_ORC) += --orc |
| 260 | objtool-args-$(CONFIG_RETPOLINE) += --retpoline | 262 | objtool-args-$(CONFIG_RETPOLINE) += --retpoline |
| @@ -264,6 +266,7 @@ objtool-args-$(CONFIG_STACK_VALIDATION) += --stackval · 3 unmodified lines | |||
| 264 | objtool-args-$(CONFIG_HAVE_STATIC_CALL_INLINE) += --static-call | 266 | objtool-args-$(CONFIG_HAVE_STATIC_CALL_INLINE) += --static-call |
| 265 | objtool-args-$(CONFIG_HAVE_UACCESS_VALIDATION) += --uaccess | 267 | objtool-args-$(CONFIG_HAVE_UACCESS_VALIDATION) += --uaccess |
| 266 | objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable | 268 | objtool-args-$(CONFIG_GCOV_KERNEL) += --no-unreachable |
| 269 | objtool-args-$(CONFIG_PREFIX_SYMBOLS) += --prefix=$(CONFIG_FUNCTION_PADDING_BYTES) | ||
| 267 | 270 | ||
| 268 | objtool-args = $(objtool-args-y) \ | 271 | objtool-args = $(objtool-args-y) \ |
| 269 | $(if $(delay-objtool), --link) \ | 272 | $(if $(delay-objtool), --link) \ |