Message ID | 1479192976-17847-3-git-send-email-bsingharora@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Balbir Singh <bsingharora@gmail.com> writes: > ISA 3 allows for prevention of instruction fetch and execution > of user mode pages. If such an error occurs, SRR1 bit 35 > reports the error. We catch and report the error in do_page_fault() > > Signed-off-by: Balbir Singh <bsingharora@gmail.com> > --- > arch/powerpc/mm/fault.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c > index d0b137d..d498e40 100644 > --- a/arch/powerpc/mm/fault.c > +++ b/arch/powerpc/mm/fault.c > @@ -390,6 +390,13 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, > #endif /* CONFIG_8xx */ > > if (is_exec) { > + > + /* > + * An execution fault + no execute ? > + */ > + if (regs->msr & SRR1_ISI_N_OR_G) > + goto bad_area; > + Can we get that SRR1 value on cpu with CPU_FTR_NOEXECUTE cleared ? The comment below says, we should look at at VM_READ and VM_WRITE. Also don't we need to look at user_mode(regs) here if we are moving this above the vma check. > /* > * Allow execution from readable areas if the MMU does not > * provide separate controls over reading and executing. > @@ -404,6 +411,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, > (cpu_has_feature(CPU_FTR_NOEXECUTE) || > !(vma->vm_flags & (VM_READ | VM_WRITE)))) > goto bad_area; > + > #ifdef CONFIG_PPC_STD_MMU > /* > * protfault should only happen due to us > -- > 2.5.5
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index d0b137d..d498e40 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -390,6 +390,13 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, #endif /* CONFIG_8xx */ if (is_exec) { + + /* + * An execution fault + no execute ? + */ + if (regs->msr & SRR1_ISI_N_OR_G) + goto bad_area; + /* * Allow execution from readable areas if the MMU does not * provide separate controls over reading and executing. @@ -404,6 +411,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, (cpu_has_feature(CPU_FTR_NOEXECUTE) || !(vma->vm_flags & (VM_READ | VM_WRITE)))) goto bad_area; + #ifdef CONFIG_PPC_STD_MMU /* * protfault should only happen due to us
ISA 3 allows for prevention of instruction fetch and execution of user mode pages. If such an error occurs, SRR1 bit 35 reports the error. We catch and report the error in do_page_fault() Signed-off-by: Balbir Singh <bsingharora@gmail.com> --- arch/powerpc/mm/fault.c | 8 ++++++++ 1 file changed, 8 insertions(+)