Skip to content

Commit abbf7fa

Browse files
committed
Merge tag 'objtool-urgent-2023-05-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull unwinder fixes from Thomas Gleixner: "A set of unwinder and tooling fixes: - Ensure that the stack pointer on x86 is aligned again so that the unwinder does not read past the end of the stack - Discard .note.gnu.property section which has a pointlessly different alignment than the other note sections. That confuses tooling of all sorts including readelf, libbpf and pahole" * tag 'objtool-urgent-2023-05-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/show_trace_log_lvl: Ensure stack pointer is aligned, again vmlinux.lds.h: Discard .note.gnu.property section
2 parents d8f14b8 + 2e4be0d commit abbf7fa

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

arch/x86/kernel/dumpstack.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
195195
printk("%sCall Trace:\n", log_lvl);
196196

197197
unwind_start(&state, task, regs, stack);
198-
stack = stack ? : get_stack_pointer(task, regs);
199198
regs = unwind_get_entry_regs(&state, &partial);
200199

201200
/*
@@ -214,9 +213,13 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
214213
* - hardirq stack
215214
* - entry stack
216215
*/
217-
for ( ; stack; stack = PTR_ALIGN(stack_info.next_sp, sizeof(long))) {
216+
for (stack = stack ?: get_stack_pointer(task, regs);
217+
stack;
218+
stack = stack_info.next_sp) {
218219
const char *stack_name;
219220

221+
stack = PTR_ALIGN(stack, sizeof(long));
222+
220223
if (get_stack_info(stack, task, &stack_info, &visit_mask)) {
221224
/*
222225
* We weren't on a valid stack. It's possible that

include/asm-generic/vmlinux.lds.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -891,9 +891,16 @@
891891
/*
892892
* Discard .note.GNU-stack, which is emitted as PROGBITS by the compiler.
893893
* Otherwise, the type of .notes section would become PROGBITS instead of NOTES.
894+
*
895+
* Also, discard .note.gnu.property, otherwise it forces the notes section to
896+
* be 8-byte aligned which causes alignment mismatches with the kernel's custom
897+
* 4-byte aligned notes.
894898
*/
895899
#define NOTES \
896-
/DISCARD/ : { *(.note.GNU-stack) } \
900+
/DISCARD/ : { \
901+
*(.note.GNU-stack) \
902+
*(.note.gnu.property) \
903+
} \
897904
.notes : AT(ADDR(.notes) - LOAD_OFFSET) { \
898905
BOUNDED_SECTION_BY(.note.*, _notes) \
899906
} NOTES_HEADERS \

0 commit comments

Comments
 (0)