• Anshuman Khandual's avatar
    arm64: errata: Workaround possible Cortex-A715 [ESR|FAR]_ELx corruption · 5db568e7
    Anshuman Khandual authored
    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
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20230102061651.34745-1-anshuman.khandual@arm.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    5db568e7
cpu_errata.c 20 KB