powerpc/mm: Detect instruction fetch denied and report
authorBalbir Singh <bsingharora@gmail.com>
Tue, 15 Nov 2016 06:56:15 +0000 (17:56 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 25 Nov 2016 04:01:35 +0000 (15:01 +1100)
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>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/mm/fault.c

index 73932f4a386e75082e622cd60049779c2d33150a..a17029aaf939e8dc67364df72b4ff1296f42a634 100644 (file)
@@ -390,6 +390,12 @@ good_area:
 #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 +410,7 @@ good_area:
                    (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