--- zzzz-none-000/linux-4.4.60/arch/arm/mm/proc-v7-2level.S 2017-04-08 07:53:53.000000000 +0000 +++ scorpion-7490-727/linux-4.4.60/arch/arm/mm/proc-v7-2level.S 2021-02-04 17:41:59.000000000 +0000 @@ -69,6 +69,47 @@ ENDPROC(cpu_ca8_switch_mm) /* + * Qualcomm Technologies Inc. Krait processors - require bp invalidation + */ +ENTRY(cpu_krait_switch_mm) +/* Sanitize link stack + * The below instrucitons will cause lr to be loaded with a value + * which will never be used, thus nullyfying branch prediction based + * attacks + */ + push {lr} + bl 1f +1: bl 1f +1: bl 1f +1: bl 1f +1: bl 1f +1: bl 1f +1: bl 1f +1: bl 1f +1: mov lr, #0 + mcr p15, 0, lr, c7, c5, 6 @ BPIALL + isb +#ifdef CONFIG_MMU + mmid r1, r1 @ get mm->context.id + ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) + ALT_UP(orr r0, r0, #TTB_FLAGS_UP) +#ifdef CONFIG_PID_IN_CONTEXTIDR + mrc p15, 0, r2, c13, c0, 1 @ read current context ID + lsr r2, r2, #8 @ extract the PID + bfi r1, r2, #8, #24 @ insert into new context ID +#endif +#ifdef CONFIG_ARM_ERRATA_754322 + dsb +#endif + mcr p15, 0, r1, c13, c0, 1 @ set context ID + isb + mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 + isb +#endif + pop {pc} +ENDPROC(cpu_krait_switch_mm) + +/* * cpu_v7_set_pte_ext(ptep, pte) * * Set a level 2 translation table entry.