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: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
@@ -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)
|
|||||||
|
|
||||||
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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user