|
@@ -371,6 +371,13 @@ static int __kprobes do_translation_fault(unsigned long addr,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static int do_alignment_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".
|
|
|
*/
|
|
@@ -418,7 +425,7 @@ static struct fault_info {
|
|
|
{ do_bad, SIGBUS, 0, "synchronous parity error (translation table walk)" },
|
|
|
{ do_bad, SIGBUS, 0, "synchronous parity error (translation table walk)" },
|
|
|
{ do_bad, SIGBUS, 0, "unknown 32" },
|
|
|
- { do_bad, SIGBUS, BUS_ADRALN, "alignment fault" },
|
|
|
+ { do_alignment_fault, SIGBUS, BUS_ADRALN, "alignment fault" },
|
|
|
{ do_bad, SIGBUS, 0, "unknown 34" },
|
|
|
{ do_bad, SIGBUS, 0, "unknown 35" },
|
|
|
{ do_bad, SIGBUS, 0, "unknown 36" },
|