| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Sami Tolvanen <samitolvanen@google.com> |
| Date: Fri, 18 Aug 2017 14:31:23 -0700 |
| Subject: ANDROID: 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. |
| |
| Bug: 145210207 |
| Change-Id: Icce1a5b8ca521227b2fd6a3309189e738fe022b8 |
| Signed-off-by: Sami Tolvanen <samitolvanen@google.com> |
| --- |
| arch/arm64/include/asm/mmu_context.h | 2 +- |
| arch/arm64/kernel/cpu-reset.h | 8 ++++---- |
| arch/arm64/kernel/cpufeature.c | 2 +- |
| 3 files changed, 6 insertions(+), 6 deletions(-) |
| |
| diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h |
| index 3827ff4040a3..2de2b464d991 100644 |
| --- a/arch/arm64/include/asm/mmu_context.h |
| +++ b/arch/arm64/include/asm/mmu_context.h |
| @@ -135,7 +135,7 @@ static inline void cpu_install_idmap(void) |
| * Atomically replaces the active TTBR1_EL1 PGD with a new VA-compatible PGD, |
| * avoiding the possibility of conflicting TLB entries being allocated. |
| */ |
| -static inline void cpu_replace_ttbr1(pgd_t *pgdp) |
| +static inline void __nocfi cpu_replace_ttbr1(pgd_t *pgdp) |
| { |
| typedef void (ttbr_replace_func)(phys_addr_t); |
| extern ttbr_replace_func idmap_cpu_replace_ttbr1; |
| diff --git a/arch/arm64/kernel/cpu-reset.h b/arch/arm64/kernel/cpu-reset.h |
| index ed50e9587ad8..054285f8d858 100644 |
| --- a/arch/arm64/kernel/cpu-reset.h |
| +++ b/arch/arm64/kernel/cpu-reset.h |
| @@ -13,10 +13,10 @@ |
| void __cpu_soft_restart(unsigned long el2_switch, unsigned long entry, |
| unsigned long arg0, unsigned long arg1, unsigned long arg2); |
| |
| -static inline void __noreturn cpu_soft_restart(unsigned long entry, |
| - unsigned long arg0, |
| - unsigned long arg1, |
| - unsigned long arg2) |
| +static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry, |
| + unsigned long arg0, |
| + unsigned long arg1, |
| + unsigned long arg2) |
| { |
| typeof(__cpu_soft_restart) *restart; |
| |
| diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c |
| index 80f459ad0190..b7db6e25a197 100644 |
| --- a/arch/arm64/kernel/cpufeature.c |
| +++ b/arch/arm64/kernel/cpufeature.c |
| @@ -1035,7 +1035,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry, |
| } |
| |
| #ifdef CONFIG_UNMAP_KERNEL_AT_EL0 |
| -static void |
| +static void __nocfi |
| kpti_install_ng_mappings(const struct arm64_cpu_capabilities *__unused) |
| { |
| typedef void (kpti_remap_fn)(int, int, phys_addr_t); |