Commit 6e52aab9 authored by Mark Brown's avatar Mark Brown Committed by Catalin Marinas

arm64: kvm: Modernize annotation for __bp_harden_hyp_vecs

We have recently introduced new macros for annotating assembly symbols
for things that aren't C functions, SYM_CODE_START() and SYM_CODE_END(),
in an effort to clarify and simplify our annotations of assembly files.

Using these for __bp_harden_hyp_vecs is more involved than for most symbols
as this symbol is annotated quite unusually as rather than just have the
explicit symbol we define _start and _end symbols which we then use to
compute the length. This does not play at all nicely with the new style
macros. Since the size of the vectors is a known constant which won't vary
the simplest thing to do is simply to drop the separate _start and _end
symbols and just use a #define for the size.
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Acked-by: default avatarMarc Zyngier <maz@kernel.org>
parent 617a2f39
...@@ -480,7 +480,7 @@ static inline void *kvm_get_hyp_vector(void) ...@@ -480,7 +480,7 @@ static inline void *kvm_get_hyp_vector(void)
int slot = -1; int slot = -1;
if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR) && data->fn) { if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR) && data->fn) {
vect = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs_start)); vect = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs));
slot = data->hyp_vectors_slot; slot = data->hyp_vectors_slot;
} }
...@@ -509,14 +509,13 @@ static inline int kvm_map_vectors(void) ...@@ -509,14 +509,13 @@ static inline int kvm_map_vectors(void)
* HBP + HEL2 -> use hardened vertors and use exec mapping * HBP + HEL2 -> use hardened vertors and use exec mapping
*/ */
if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR)) { if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR)) {
__kvm_bp_vect_base = kvm_ksym_ref(__bp_harden_hyp_vecs_start); __kvm_bp_vect_base = kvm_ksym_ref(__bp_harden_hyp_vecs);
__kvm_bp_vect_base = kern_hyp_va(__kvm_bp_vect_base); __kvm_bp_vect_base = kern_hyp_va(__kvm_bp_vect_base);
} }
if (cpus_have_const_cap(ARM64_HARDEN_EL2_VECTORS)) { if (cpus_have_const_cap(ARM64_HARDEN_EL2_VECTORS)) {
phys_addr_t vect_pa = __pa_symbol(__bp_harden_hyp_vecs_start); phys_addr_t vect_pa = __pa_symbol(__bp_harden_hyp_vecs);
unsigned long size = (__bp_harden_hyp_vecs_end - unsigned long size = __BP_HARDEN_HYP_VECS_SZ;
__bp_harden_hyp_vecs_start);
/* /*
* Always allocate a spare vector slot, as we don't * Always allocate a spare vector slot, as we don't
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#define TTBR_ASID_MASK (UL(0xffff) << 48) #define TTBR_ASID_MASK (UL(0xffff) << 48)
#define BP_HARDEN_EL2_SLOTS 4 #define BP_HARDEN_EL2_SLOTS 4
#define __BP_HARDEN_HYP_VECS_SZ (BP_HARDEN_EL2_SLOTS * SZ_2K)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -45,7 +46,8 @@ struct bp_hardening_data { ...@@ -45,7 +46,8 @@ struct bp_hardening_data {
#if (defined(CONFIG_HARDEN_BRANCH_PREDICTOR) || \ #if (defined(CONFIG_HARDEN_BRANCH_PREDICTOR) || \
defined(CONFIG_HARDEN_EL2_VECTORS)) defined(CONFIG_HARDEN_EL2_VECTORS))
extern char __bp_harden_hyp_vecs_start[], __bp_harden_hyp_vecs_end[];
extern char __bp_harden_hyp_vecs[];
extern atomic_t arm64_el2_vector_last_slot; extern atomic_t arm64_el2_vector_last_slot;
#endif /* CONFIG_HARDEN_BRANCH_PREDICTOR || CONFIG_HARDEN_EL2_VECTORS */ #endif /* CONFIG_HARDEN_BRANCH_PREDICTOR || CONFIG_HARDEN_EL2_VECTORS */
......
...@@ -119,7 +119,7 @@ extern char __smccc_workaround_1_smc_end[]; ...@@ -119,7 +119,7 @@ extern char __smccc_workaround_1_smc_end[];
static void __copy_hyp_vect_bpi(int slot, const char *hyp_vecs_start, static void __copy_hyp_vect_bpi(int slot, const char *hyp_vecs_start,
const char *hyp_vecs_end) const char *hyp_vecs_end)
{ {
void *dst = lm_alias(__bp_harden_hyp_vecs_start + slot * SZ_2K); void *dst = lm_alias(__bp_harden_hyp_vecs + slot * SZ_2K);
int i; int i;
for (i = 0; i < SZ_2K; i += 0x80) for (i = 0; i < SZ_2K; i += 0x80)
......
...@@ -312,11 +312,13 @@ alternative_cb_end ...@@ -312,11 +312,13 @@ alternative_cb_end
.endm .endm
.align 11 .align 11
ENTRY(__bp_harden_hyp_vecs_start) SYM_CODE_START(__bp_harden_hyp_vecs)
.rept BP_HARDEN_EL2_SLOTS .rept BP_HARDEN_EL2_SLOTS
generate_vectors generate_vectors
.endr .endr
ENTRY(__bp_harden_hyp_vecs_end) 1: .org __bp_harden_hyp_vecs + __BP_HARDEN_HYP_VECS_SZ
.org 1b
SYM_CODE_END(__bp_harden_hyp_vecs)
.popsection .popsection
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment