Skip to content

Commit cbdac84

Browse files
samitolvanenkees
authored andcommitted
arm64: add __nocfi to functions that jump to a physical address
Disable CFI checking for functions that switch to linear mapping and make an indirect call to a physical address, since the compiler only understands virtual addresses and the CFI check for such indirect calls would always fail. Signed-off-by: Sami Tolvanen <samitolvanen@google.com> Reviewed-by: Kees Cook <keescook@chromium.org> Tested-by: Nathan Chancellor <nathan@kernel.org> Signed-off-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20210408182843.1754385-15-samitolvanen@google.com
1 parent bde3397 commit cbdac84

3 files changed

Lines changed: 6 additions & 6 deletions

File tree

arch/arm64/include/asm/mmu_context.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ static inline void cpu_install_idmap(void)
119119
* Atomically replaces the active TTBR1_EL1 PGD with a new VA-compatible PGD,
120120
* avoiding the possibility of conflicting TLB entries being allocated.
121121
*/
122-
static inline void cpu_replace_ttbr1(pgd_t *pgdp)
122+
static inline void __nocfi cpu_replace_ttbr1(pgd_t *pgdp)
123123
{
124124
typedef void (ttbr_replace_func)(phys_addr_t);
125125
extern ttbr_replace_func idmap_cpu_replace_ttbr1;

arch/arm64/kernel/cpu-reset.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
void __cpu_soft_restart(unsigned long el2_switch, unsigned long entry,
1414
unsigned long arg0, unsigned long arg1, unsigned long arg2);
1515

16-
static inline void __noreturn cpu_soft_restart(unsigned long entry,
17-
unsigned long arg0,
18-
unsigned long arg1,
19-
unsigned long arg2)
16+
static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry,
17+
unsigned long arg0,
18+
unsigned long arg1,
19+
unsigned long arg2)
2020
{
2121
typeof(__cpu_soft_restart) *restart;
2222

arch/arm64/kernel/cpufeature.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1445,7 +1445,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
14451445
}
14461446

14471447
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
1448-
static void
1448+
static void __nocfi
14491449
kpti_install_ng_mappings(const struct arm64_cpu_capabilities *__unused)
14501450
{
14511451
typedef void (kpti_remap_fn)(int, int, phys_addr_t);

0 commit comments

Comments
 (0)