Balbir Singh <bsinghar...@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 <bsinghar...@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