Commit 9a33fc21 authored by Paul Mundt's avatar Paul Mundt

sh: Make is_valid_bugaddr() more intelligent on nommu.

Currently is_valid_bugaddr() is true for anything >= PAGE_OFFSET, which
happens to be 0 on nommu configurations. Make this a bit smarter by just
reading in the opcode and comparing it against the trap type that we
already know. Follows the logic from avr32.
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent bfd3c7a7
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/kdebug.h> #include <linux/kdebug.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/uaccess.h>
#include <asm/system.h> #include <asm/system.h>
#ifdef CONFIG_BUG #ifdef CONFIG_BUG
...@@ -21,7 +22,14 @@ static void handle_BUG(struct pt_regs *regs) ...@@ -21,7 +22,14 @@ static void handle_BUG(struct pt_regs *regs)
int is_valid_bugaddr(unsigned long addr) int is_valid_bugaddr(unsigned long addr)
{ {
return addr >= PAGE_OFFSET; unsigned short opcode;
if (addr < PAGE_OFFSET)
return 0;
if (probe_kernel_address((u16 *)addr, opcode))
return 0;
return opcode == TRAPA_BUG_OPCODE;
} }
#endif #endif
......
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