Commit 88fc241f authored by Doug Chapman's avatar Doug Chapman Committed by Tony Luck

[IA64] dump stack on kernel unaligned warnings

Often the cause of kernel unaligned access warnings is not
obvious from just the ip displayed in the warning.  This adds
the option via proc to dump the stack in addition to the warning.
The default is off (just display the 1 line warning).  To enable
the stack to be shown: echo 1 > /proc/sys/kernel/unaligned-dump-stack
Signed-off-by: default avatarDoug Chapman <doug.chapman@hp.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 0773a6cf
...@@ -59,6 +59,7 @@ dump (const char *str, void *vp, size_t len) ...@@ -59,6 +59,7 @@ dump (const char *str, void *vp, size_t len)
* (i.e. don't allow attacker to fill up logs with unaligned accesses). * (i.e. don't allow attacker to fill up logs with unaligned accesses).
*/ */
int no_unaligned_warning; int no_unaligned_warning;
int unaligned_dump_stack;
static int noprint_warning; static int noprint_warning;
/* /*
...@@ -1371,9 +1372,12 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) ...@@ -1371,9 +1372,12 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
} }
} }
} else { } else {
if (within_logging_rate_limit()) if (within_logging_rate_limit()) {
printk(KERN_WARNING "kernel unaligned access to 0x%016lx, ip=0x%016lx\n", printk(KERN_WARNING "kernel unaligned access to 0x%016lx, ip=0x%016lx\n",
ifa, regs->cr_iip + ipsr->ri); ifa, regs->cr_iip + ipsr->ri);
if (unaligned_dump_stack)
dump_stack();
}
set_fs(KERNEL_DS); set_fs(KERNEL_DS);
} }
......
...@@ -144,6 +144,7 @@ extern int acct_parm[]; ...@@ -144,6 +144,7 @@ extern int acct_parm[];
#ifdef CONFIG_IA64 #ifdef CONFIG_IA64
extern int no_unaligned_warning; extern int no_unaligned_warning;
extern int unaligned_dump_stack;
#endif #endif
#ifdef CONFIG_RT_MUTEXES #ifdef CONFIG_RT_MUTEXES
...@@ -781,6 +782,14 @@ static struct ctl_table kern_table[] = { ...@@ -781,6 +782,14 @@ static struct ctl_table kern_table[] = {
.mode = 0644, .mode = 0644,
.proc_handler = &proc_dointvec, .proc_handler = &proc_dointvec,
}, },
{
.ctl_name = CTL_UNNUMBERED,
.procname = "unaligned-dump-stack",
.data = &unaligned_dump_stack,
.maxlen = sizeof (int),
.mode = 0644,
.proc_handler = &proc_dointvec,
},
#endif #endif
#ifdef CONFIG_DETECT_SOFTLOCKUP #ifdef CONFIG_DETECT_SOFTLOCKUP
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment