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
