forked from luck/tmp_suning_uos_patched
parisc: signal fixup - SIGBUS vs. SIGSEGV
Clean up code to send correct signal on invalid memory accesses: Send SIGBUS instead of SIGSEGV for memory accesses outside of mmap'ed areas This fixes the mmap13 testcase from the Linux Test Project. Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
parent
63379c1353
commit
1f2048fd8b
|
@ -280,12 +280,22 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
|||
}
|
||||
show_regs(regs);
|
||||
#endif
|
||||
/* FIXME: actually we need to get the signo and code correct */
|
||||
si.si_signo = SIGSEGV;
|
||||
switch (code) {
|
||||
case 15: /* Data TLB miss fault/Data page fault */
|
||||
case 17: /* NA data TLB miss / page fault */
|
||||
case 18: /* Unaligned access - PCXS only */
|
||||
si.si_signo = SIGBUS;
|
||||
si.si_code = BUS_ADRERR;
|
||||
break;
|
||||
case 16: /* Non-access instruction TLB miss fault */
|
||||
case 26: /* PCXL: Data memory access rights trap */
|
||||
default:
|
||||
si.si_signo = SIGSEGV;
|
||||
si.si_code = SEGV_MAPERR;
|
||||
}
|
||||
si.si_errno = 0;
|
||||
si.si_code = SEGV_MAPERR;
|
||||
si.si_addr = (void __user *) address;
|
||||
force_sig_info(SIGSEGV, &si, current);
|
||||
force_sig_info(si.si_signo, &si, current);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user