• Mark Rutland's avatar
    Revert "arm64: mm: set the contiguous bit for kernel mappings where appropriate" · d81bbe6d
    Mark Rutland authored
    This reverts commit 0bfc445d.
    
    When we change the permissions of regions mapped using contiguous
    entries, the architecture requires us to follow a Break-Before-Make
    strategy, breaking *all* associated entries before we can change any of
    the following properties from the entries:
    
     - presence of the contiguous bit
     - output address
     - attributes
     - permissiones
    
    Failure to do so can result in a number of problems (e.g. TLB conflict
    aborts and/or erroneous results from TLB lookups).
    
    See ARM DDI 0487A.k_iss10775, "Misprogramming of the Contiguous bit",
    page D4-1762.
    
    We do not take this into account when altering the permissions of kernel
    segments in mark_rodata_ro(), where we change the permissions of live
    contiguous entires one-by-one, leaving them transiently inconsistent.
    This has been observed to result in failures on some fast model
    configurations.
    
    Unfortunately, we cannot follow Break-Before-Make here as we'd have to
    unmap kernel text and data used to perform the sequence.
    
    For the timebeing, revert commit 0bfc445d so as to avoid issues
    resulting from this misuse of the contiguous bit.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Reported-by: default avatarJean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <Will.Deacon@arm.com>
    Cc: stable@vger.kernel.org # v4.10
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    d81bbe6d
mmu.c 20.7 KB