Loading arch/parisc/mm/fault.c +20 −2 Original line number Diff line number Diff line Loading @@ -282,16 +282,34 @@ bad_area: #endif switch (code) { case 15: /* Data TLB miss fault/Data page fault */ /* send SIGSEGV when outside of vma */ if (!vma || address < vma->vm_start || address > vma->vm_end) { si.si_signo = SIGSEGV; si.si_code = SEGV_MAPERR; break; } /* send SIGSEGV for wrong permissions */ if ((vma->vm_flags & acc_type) != acc_type) { si.si_signo = SIGSEGV; si.si_code = SEGV_ACCERR; break; } /* probably address is outside of mapped file */ /* fall through */ case 17: /* NA data TLB miss / page fault */ case 18: /* Unaligned access - PCXS only */ si.si_signo = SIGBUS; si.si_code = BUS_ADRERR; si.si_code = (code == 18) ? BUS_ADRALN : 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_code = (code == 26) ? SEGV_ACCERR : SEGV_MAPERR; break; } si.si_errno = 0; si.si_addr = (void __user *) address; Loading Loading
arch/parisc/mm/fault.c +20 −2 Original line number Diff line number Diff line Loading @@ -282,16 +282,34 @@ bad_area: #endif switch (code) { case 15: /* Data TLB miss fault/Data page fault */ /* send SIGSEGV when outside of vma */ if (!vma || address < vma->vm_start || address > vma->vm_end) { si.si_signo = SIGSEGV; si.si_code = SEGV_MAPERR; break; } /* send SIGSEGV for wrong permissions */ if ((vma->vm_flags & acc_type) != acc_type) { si.si_signo = SIGSEGV; si.si_code = SEGV_ACCERR; break; } /* probably address is outside of mapped file */ /* fall through */ case 17: /* NA data TLB miss / page fault */ case 18: /* Unaligned access - PCXS only */ si.si_signo = SIGBUS; si.si_code = BUS_ADRERR; si.si_code = (code == 18) ? BUS_ADRALN : 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_code = (code == 26) ? SEGV_ACCERR : SEGV_MAPERR; break; } si.si_errno = 0; si.si_addr = (void __user *) address; Loading