|
@@ -53,6 +53,8 @@ static int cpu_enable_trap_ctr_access(void *__unused)
|
|
|
DEFINE_PER_CPU_READ_MOSTLY(struct bp_hardening_data, bp_hardening_data);
|
|
|
|
|
|
#ifdef CONFIG_KVM
|
|
|
+extern char __psci_hyp_bp_inval_start[], __psci_hyp_bp_inval_end[];
|
|
|
+
|
|
|
static void __copy_hyp_vect_bpi(int slot, const char *hyp_vecs_start,
|
|
|
const char *hyp_vecs_end)
|
|
|
{
|
|
@@ -94,6 +96,9 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn,
|
|
|
spin_unlock(&bp_lock);
|
|
|
}
|
|
|
#else
|
|
|
+#define __psci_hyp_bp_inval_start NULL
|
|
|
+#define __psci_hyp_bp_inval_end NULL
|
|
|
+
|
|
|
static void __install_bp_hardening_cb(bp_hardening_cb_t fn,
|
|
|
const char *hyp_vecs_start,
|
|
|
const char *hyp_vecs_end)
|
|
@@ -118,6 +123,21 @@ static void install_bp_hardening_cb(const struct arm64_cpu_capabilities *entry,
|
|
|
|
|
|
__install_bp_hardening_cb(fn, hyp_vecs_start, hyp_vecs_end);
|
|
|
}
|
|
|
+
|
|
|
+#include <linux/psci.h>
|
|
|
+
|
|
|
+static int enable_psci_bp_hardening(void *data)
|
|
|
+{
|
|
|
+ const struct arm64_cpu_capabilities *entry = data;
|
|
|
+
|
|
|
+ if (psci_ops.get_version)
|
|
|
+ install_bp_hardening_cb(entry,
|
|
|
+ (bp_hardening_cb_t)psci_ops.get_version,
|
|
|
+ __psci_hyp_bp_inval_start,
|
|
|
+ __psci_hyp_bp_inval_end);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
#endif /* CONFIG_HARDEN_BRANCH_PREDICTOR */
|
|
|
|
|
|
#define MIDR_RANGE(model, min, max) \
|
|
@@ -260,6 +280,28 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
|
|
|
.capability = ARM64_WORKAROUND_858921,
|
|
|
MIDR_ALL_VERSIONS(MIDR_CORTEX_A73),
|
|
|
},
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_HARDEN_BRANCH_PREDICTOR
|
|
|
+ {
|
|
|
+ .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
|
|
|
+ MIDR_ALL_VERSIONS(MIDR_CORTEX_A57),
|
|
|
+ .enable = enable_psci_bp_hardening,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
|
|
|
+ MIDR_ALL_VERSIONS(MIDR_CORTEX_A72),
|
|
|
+ .enable = enable_psci_bp_hardening,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
|
|
|
+ MIDR_ALL_VERSIONS(MIDR_CORTEX_A73),
|
|
|
+ .enable = enable_psci_bp_hardening,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
|
|
|
+ MIDR_ALL_VERSIONS(MIDR_CORTEX_A75),
|
|
|
+ .enable = enable_psci_bp_hardening,
|
|
|
+ },
|
|
|
#endif
|
|
|
{
|
|
|
}
|