|
@@ -268,11 +268,12 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err)
|
|
|
|
|
|
show_registers(regs);
|
|
show_registers(regs);
|
|
#ifdef CONFIG_X86_32
|
|
#ifdef CONFIG_X86_32
|
|
- sp = (unsigned long) (®s->sp);
|
|
|
|
- savesegment(ss, ss);
|
|
|
|
- if (user_mode(regs)) {
|
|
|
|
|
|
+ if (user_mode_vm(regs)) {
|
|
sp = regs->sp;
|
|
sp = regs->sp;
|
|
ss = regs->ss & 0xffff;
|
|
ss = regs->ss & 0xffff;
|
|
|
|
+ } else {
|
|
|
|
+ sp = kernel_stack_pointer(regs);
|
|
|
|
+ savesegment(ss, ss);
|
|
}
|
|
}
|
|
printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip);
|
|
printk(KERN_EMERG "EIP: [<%08lx>] ", regs->ip);
|
|
print_symbol("%s", regs->ip);
|
|
print_symbol("%s", regs->ip);
|