arm64: errata: Workaround possible Cortex-A715 [ESR|FAR]_ELx corruption
If a Cortex-A715 cpu sees a page mapping permissions change from executable to non-executable, it may corrupt the ESR_ELx and FAR_ELx registers, on the next instruction abort caused by permission fault. Only user-space does executable to non-executable permission transition via mprotect() system call which calls ptep_modify_prot_start() and ptep_modify _prot_commit() helpers, while changing the page mapping. The platform code can override these helpers via __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION. Work around the problem via doing a break-before-make TLB invalidation, for all executable user space mappings, that go through mprotect() system call. This overrides ptep_modify_prot_start() and ptep_modify_prot_commit(), via defining HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION on the platform thus giving an opportunity to intercept user space exec mappings, and do the necessary TLB invalidation. Similar interceptions are also implemented for HugeTLB. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Mark Rutland <mark.rutland@arm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by:Anshuman Khandual <anshuman.khandual@arm.com> Reviewed-by:
Catalin Marinas <catalin.marinas@arm.com> Link: https://lore.kernel.org/r/20221116140915.356601-3-anshuman.khandual@arm.com Signed-off-by:
Will Deacon <will@kernel.org>
Showing
- Documentation/arm64/silicon-errata.rst 2 additions, 0 deletionsDocumentation/arm64/silicon-errata.rst
- arch/arm64/Kconfig 16 additions, 0 deletionsarch/arm64/Kconfig
- arch/arm64/include/asm/hugetlb.h 9 additions, 0 deletionsarch/arm64/include/asm/hugetlb.h
- arch/arm64/include/asm/pgtable.h 9 additions, 0 deletionsarch/arm64/include/asm/pgtable.h
- arch/arm64/kernel/cpu_errata.c 7 additions, 0 deletionsarch/arm64/kernel/cpu_errata.c
- arch/arm64/mm/hugetlbpage.c 21 additions, 0 deletionsarch/arm64/mm/hugetlbpage.c
- arch/arm64/mm/mmu.c 21 additions, 0 deletionsarch/arm64/mm/mmu.c
- arch/arm64/tools/cpucaps 1 addition, 0 deletionsarch/arm64/tools/cpucaps
Please register or sign in to comment