|
@@ -364,17 +364,6 @@ static int __kprobes do_translation_fault(unsigned long addr,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Some section permission faults need to be handled gracefully. They can
|
|
|
|
- * happen due to a __{get,put}_user during an oops.
|
|
|
|
- */
|
|
|
|
-static int do_sect_fault(unsigned long addr, unsigned int esr,
|
|
|
|
- struct pt_regs *regs)
|
|
|
|
-{
|
|
|
|
- do_bad_area(addr, esr, regs);
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* This abort handler always returns "fault".
|
|
* This abort handler always returns "fault".
|
|
*/
|
|
*/
|
|
@@ -398,12 +387,12 @@ static struct fault_info {
|
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },
|
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },
|
|
{ do_page_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
|
|
{ do_page_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
|
|
{ do_bad, SIGBUS, 0, "reserved access flag fault" },
|
|
{ do_bad, SIGBUS, 0, "reserved access flag fault" },
|
|
- { do_bad, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
|
|
|
- { do_bad, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },
|
|
|
|
|
|
+ { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
|
|
|
+ { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },
|
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 3 access flag fault" },
|
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 3 access flag fault" },
|
|
{ do_bad, SIGBUS, 0, "reserved permission fault" },
|
|
{ do_bad, SIGBUS, 0, "reserved permission fault" },
|
|
- { do_bad, SIGSEGV, SEGV_ACCERR, "level 1 permission fault" },
|
|
|
|
- { do_sect_fault, SIGSEGV, SEGV_ACCERR, "level 2 permission fault" },
|
|
|
|
|
|
+ { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 permission fault" },
|
|
|
|
+ { do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 permission fault" },
|
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 3 permission fault" },
|
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 3 permission fault" },
|
|
{ do_bad, SIGBUS, 0, "synchronous external abort" },
|
|
{ do_bad, SIGBUS, 0, "synchronous external abort" },
|
|
{ do_bad, SIGBUS, 0, "asynchronous external abort" },
|
|
{ do_bad, SIGBUS, 0, "asynchronous external abort" },
|