From 52c4e57514a22cc9a1a6f30622cefc13f288b7ff Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 12 Oct 2003 04:44:23 -0700 Subject: [PATCH] Make kernel stack dumps handle unaligned kernel stacks more gracefully. They can happen on x86 as a result of interrupts in BIOS calls. Noted by Manfred Spraul. --- arch/i386/kernel/traps.c | 4 ++-- mm/slab.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index db4e89ef4cbc2..3687472948ecc 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c @@ -104,7 +104,7 @@ void show_trace(struct task_struct *task, unsigned long * stack) #ifdef CONFIG_KALLSYMS printk("\n"); #endif - while (((long) stack & (THREAD_SIZE-1)) != 0) { + while (((long) stack & (THREAD_SIZE-4)) != 0) { addr = *stack++; if (kernel_text_address(addr)) { printk(" [<%08lx>] ", addr); @@ -138,7 +138,7 @@ void show_stack(struct task_struct *task, unsigned long *esp) stack = esp; for(i = 0; i < kstack_depth_to_print; i++) { - if (((long) stack & (THREAD_SIZE-1)) == 0) + if (((long) stack & (THREAD_SIZE-4)) == 0) break; if (i && ((i % 8) == 0)) printk("\n "); diff --git a/mm/slab.c b/mm/slab.c index 7838f7f4dfc80..1947a87227ab4 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -862,7 +862,7 @@ static void store_stackinfo(kmem_cache_t *cachep, unsigned long *addr, unsigned unsigned long *sptr = &caller; unsigned long svalue; - while (((long) sptr & (THREAD_SIZE-1)) != 0) { + while (((long) sptr & (THREAD_SIZE-4)) != 0) { svalue = *sptr++; if (kernel_text_address(svalue)) { *addr++=svalue; -- 2.53.0