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: Mark Brown <broonie@kernel.org> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Acked-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
617a2f392c
commit
6e52aab901
@ -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)
|
|||||||
* 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 @@
|
|||||||
#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 {
|
|||||||
|
|
||||||
#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[];
|
|||||||
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
|
|||||||
.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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user