--- zzzz-none-000/linux-4.1.52/arch/arm/kernel/entry-common.S 2018-05-28 02:26:45.000000000 +0000 +++ bcm63-7530ax-731/linux-4.1.52/arch/arm/kernel/entry-common.S 2022-03-02 11:37:12.000000000 +0000 @@ -90,7 +90,11 @@ bl schedule_tail cmp r5, #0 movne r0, r4 +#if defined(CONFIG_BCM_KF_SPECTRE_PATCH) && defined(CONFIG_BCM_SPECTRE_PATCH_ENABLE) + badrne lr, 1f +#else adrne lr, BSYM(1f) +#endif retne r5 1: get_thread_info tsk b ret_slow_syscall @@ -197,9 +201,13 @@ tst r10, #_TIF_SYSCALL_WORK @ are we tracing syscalls? bne __sys_trace +#if defined(CONFIG_BCM_KF_SPECTRE_PATCH) && defined(CONFIG_BCM_SPECTRE_PATCH_ENABLE) + invoke_syscall tbl, scno, r10, ret_fast_syscall +#else cmp scno, #NR_syscalls @ check upper syscall limit adr lr, BSYM(ret_fast_syscall) @ return address ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine +#endif add r1, sp, #S_OFF 2: cmp scno, #(__ARM_NR_BASE - __NR_SYSCALL_BASE) @@ -233,6 +241,10 @@ add r0, sp, #S_OFF bl syscall_trace_enter +#if defined(CONFIG_BCM_KF_SPECTRE_PATCH) && defined(CONFIG_BCM_SPECTRE_PATCH_ENABLE) + mov scno, r0 + invoke_syscall tbl, scno, r10, __sys_trace_return, reload=1 +#else adr lr, BSYM(__sys_trace_return) @ return address mov scno, r0 @ syscall number (possibly new) add r1, sp, #S_R0 + S_OFF @ pointer to regs @@ -240,6 +252,7 @@ ldmccia r1, {r0 - r6} @ have to reload r0 - r6 stmccia sp, {r4, r5} @ and update the stack args ldrcc pc, [tbl, scno, lsl #2] @ call sys_* routine +#endif cmp scno, #-1 @ skip the syscall? bne 2b add sp, sp, #S_OFF @ restore stack @@ -285,6 +298,12 @@ bic scno, r0, #__NR_OABI_SYSCALL_BASE cmp scno, #__NR_syscall - __NR_SYSCALL_BASE cmpne scno, #NR_syscalls @ check range +#if defined(CONFIG_BCM_KF_SPECTRE_PATCH) && defined(CONFIG_BCM_SPECTRE_PATCH_ENABLE) +#ifdef CONFIG_CPU_SPECTRE + movhs scno, #0 + csdb +#endif +#endif /* CONFIG_BCM_KF_SPECTRE_PATCH && CONFIG_BCM_SPECTRE_PATCH_ENABLE */ stmloia sp, {r5, r6} @ shuffle args movlo r0, r1 movlo r1, r2