diff options
| author | Peter Zijlstra <peterz@infradead.org> | 2025-11-26 10:55:17 +0100 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2025-11-27 09:32:47 +0100 |
| commit | d62e4f2b9542d25d183f068033558e87e81a00a8 (patch) | |
| tree | 5c44911816cba32ed0a96bc0282f1ca650c75b87 /arch | |
| parent | 860238af7a3348225de228dc0f33a7d631638333 (diff) | |
| download | linux-d62e4f2b9542d25d183f068033558e87e81a00a8.tar.gz | |
x86/bug: Fix BUG_FORMAT vs KASLR
Encoding a relative NULL pointer doesn't work for KASLR, when the
whole kernel image gets shifted, the __bug_table and the target string
get shifted by the same amount and the relative offset is preserved.
However when the target is an absolute 0 value and the __bug_table
gets moved about, the end result in a pointer equivalent to
kaslr_offset(), not NULL.
Notably, this will generate SHN_UNDEF relocations, and Ard would
really like to not have those at all.
Use the empty string to denote no-string.
Suggested-by: Linus Torvalds <torvalds@linuxfoundation.org>
Cc: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/x86/include/asm/bug.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h index d0a96ff5c02c0b..4b5ab56903bb78 100644 --- a/arch/x86/include/asm/bug.h +++ b/arch/x86/include/asm/bug.h @@ -86,7 +86,7 @@ extern void __WARN_trap(struct bug_entry *bug, ...); #ifdef CONFIG_DEBUG_BUGVERBOSE_DETAILED #define WARN_CONDITION_STR(cond_str) cond_str #else -#define WARN_CONDITION_STR(cond_str) NULL +#define WARN_CONDITION_STR(cond_str) "" #endif #define _BUG_FLAGS(cond_str, ins, flags, extra) \ @@ -103,8 +103,12 @@ do { \ } while (0) #define ARCH_WARN_ASM(file, line, flags, size) \ + ".pushsection .rodata.str1.1, \"aMS\", @progbits, 1\n" \ + "99:\n" \ + "\t.string \"\"\n" \ + ".popsection\n" \ "1:\t " ASM_UD2 "\n" \ - _BUG_FLAGS_ASM("0", file, line, flags, size, "") + _BUG_FLAGS_ASM("99b", file, line, flags, size, "") #else |
