Aneesh/Ben reported that the change to do_page_fault() needs
to handle the case where CPU_FTR_COHERENT_ICACHE is missing
but we have CPU_FTR_NOEXECUTE. In those cases the check
added for SRR1_ISI_N_OR_G might trigger a false positive.

This patch checks for CPU_FTR_COHERENT_ICACHE in addition
to the MSR value

Reported-by: Aneesh Kumar K.V <[email protected]>
Signed-off-by: Balbir Singh <[email protected]>
---

 Applies on top of powerpc/next and I've not added a fixes tag

 arch/powerpc/mm/fault.c | 9 ++++++++-
 drivers/crypto/Makefile | 1 -
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index a17029aa..eab3ded 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -392,8 +392,15 @@ int do_page_fault(struct pt_regs *regs, unsigned long 
address,
        if (is_exec) {
                /*
                 * An execution fault + no execute ?
+                * We need to check for CPU_FTR_COHERENT_ICACHE, since
+                * on some variants, an NX fault is taken and
+                * hash_page_do_lazy_icache() does the fixup. Without the
+                * check for CPU_FTR_COHERENT_ICACHE we could have a false
+                * positive if we have !CPU_FTR_COHERENT_ICACHE and
+                * CPU_FTR_NOEXECUTE
                 */
-               if (regs->msr & SRR1_ISI_N_OR_G)
+               if (cpu_has_feature(CPU_FTR_COHERENT_ICACHE) &&
+                       (regs->msr & SRR1_ISI_N_OR_G))
                        goto bad_area;
 
                /*
diff --git a/drivers/crypto/Makefile b/drivers/crypto/Makefile
index ad7250f..3c6432d 100644
--- a/drivers/crypto/Makefile
+++ b/drivers/crypto/Makefile
@@ -31,4 +31,3 @@ obj-$(CONFIG_CRYPTO_DEV_QCE) += qce/
 obj-$(CONFIG_CRYPTO_DEV_VMX) += vmx/
 obj-$(CONFIG_CRYPTO_DEV_SUN4I_SS) += sunxi-ss/
 obj-$(CONFIG_CRYPTO_DEV_ROCKCHIP) += rockchip/
-obj-$(CONFIG_CRYPTO_DEV_CHELSIO) += chelsio/
-- 
2.5.5

Reply via email to