Merge "arm64: Implement branch predictor hardening for Falkor"
This commit is contained in:
commit
741767ad2c
2 changed files with 37 additions and 2 deletions
|
@ -77,3 +77,11 @@ ENTRY(__psci_hyp_bp_inval_start)
|
||||||
ldp x0, x1, [sp, #(16 * 8)]
|
ldp x0, x1, [sp, #(16 * 8)]
|
||||||
add sp, sp, #(8 * 18)
|
add sp, sp, #(8 * 18)
|
||||||
ENTRY(__psci_hyp_bp_inval_end)
|
ENTRY(__psci_hyp_bp_inval_end)
|
||||||
|
|
||||||
|
ENTRY(__qcom_hyp_sanitize_link_stack_start)
|
||||||
|
stp x29, x30, [sp, #-16]!
|
||||||
|
.rept 16
|
||||||
|
bl . + 4
|
||||||
|
.endr
|
||||||
|
ldp x29, x30, [sp], #16
|
||||||
|
ENTRY(__qcom_hyp_sanitize_link_stack_end)
|
||||||
|
|
|
@ -37,6 +37,8 @@ DEFINE_PER_CPU_READ_MOSTLY(struct bp_hardening_data, bp_hardening_data);
|
||||||
|
|
||||||
#ifdef CONFIG_KVM
|
#ifdef CONFIG_KVM
|
||||||
extern char __psci_hyp_bp_inval_start[], __psci_hyp_bp_inval_end[];
|
extern char __psci_hyp_bp_inval_start[], __psci_hyp_bp_inval_end[];
|
||||||
|
extern char __qcom_hyp_sanitize_link_stack_start[];
|
||||||
|
extern char __qcom_hyp_sanitize_link_stack_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)
|
||||||
|
@ -79,8 +81,10 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn,
|
||||||
spin_unlock(&bp_lock);
|
spin_unlock(&bp_lock);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define __psci_hyp_bp_inval_start NULL
|
#define __psci_hyp_bp_inval_start NULL
|
||||||
#define __psci_hyp_bp_inval_end NULL
|
#define __psci_hyp_bp_inval_end NULL
|
||||||
|
#define __qcom_hyp_sanitize_link_stack_start NULL
|
||||||
|
#define __qcom_hyp_sanitize_link_stack_end NULL
|
||||||
|
|
||||||
static void __maybe_unused __install_bp_hardening_cb(bp_hardening_cb_t fn,
|
static void __maybe_unused __install_bp_hardening_cb(bp_hardening_cb_t fn,
|
||||||
const char *hyp_vecs_start,
|
const char *hyp_vecs_start,
|
||||||
|
@ -122,6 +126,29 @@ static int enable_psci_bp_hardening(void *data)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __maybe_unused qcom_link_stack_sanitization(void)
|
||||||
|
{
|
||||||
|
u64 tmp;
|
||||||
|
|
||||||
|
asm volatile("mov %0, x30 \n"
|
||||||
|
".rept 16 \n"
|
||||||
|
"bl . + 4 \n"
|
||||||
|
".endr \n"
|
||||||
|
"mov x30, %0 \n"
|
||||||
|
: "=&r" (tmp));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __maybe_unused qcom_enable_link_stack_sanitization(void *data)
|
||||||
|
{
|
||||||
|
const struct arm64_cpu_capabilities *entry = data;
|
||||||
|
|
||||||
|
install_bp_hardening_cb(entry, qcom_link_stack_sanitization,
|
||||||
|
__qcom_hyp_sanitize_link_stack_start,
|
||||||
|
__qcom_hyp_sanitize_link_stack_end);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif /* CONFIG_HARDEN_BRANCH_PREDICTOR */
|
#endif /* CONFIG_HARDEN_BRANCH_PREDICTOR */
|
||||||
|
|
||||||
#define MIDR_RANGE(model, min, max) \
|
#define MIDR_RANGE(model, min, max) \
|
||||||
|
|
Loading…
Add table
Reference in a new issue