• Mark Brown's avatar
    arm64: Set GP bit in kernel page tables to enable BTI for the kernel · c8027285
    Mark Brown authored
    Now that the kernel is built with BTI annotations enable the feature by
    setting the GP bit in the stage 1 translation tables.  This is done
    based on the features supported by the boot CPU so that we do not need
    to rewrite the translation tables.
    
    In order to avoid potential issues on big.LITTLE systems when there are
    a mix of BTI and non-BTI capable CPUs in the system when we have enabled
    kernel mode BTI we change BTI to be a _STRICT_BOOT_CPU_FEATURE when we
    have kernel BTI.  This will prevent any CPUs that don't support BTI
    being started if the boot CPU supports BTI rather than simply not using
    BTI as we do when supporting BTI only in userspace.  The main concern is
    the possibility of BTYPE being preserved by a CPU that does not
    implement BTI when a thread is migrated to it resulting in an incorrect
    state which could generate an exception when the thread migrates back to
    a CPU that does support BTI.  If we encounter practical systems which
    mix BTI and non-BTI CPUs we will need to revisit this implementation.
    
    Since we currently do not generate landing pads in the BPF JIT we only
    map the base kernel text in this way.
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Link: https://lore.kernel.org/r/20200506195138.22086-5-broonie@kernel.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
    c8027285
cpufeature.c 80.4 KB