arm64: Rename ARM64_HARDEN_BRANCH_PREDICTOR to ARM64_SPECTRE_V2
authorWill Deacon <will@kernel.org>
Tue, 15 Sep 2020 22:00:31 +0000 (23:00 +0100)
committerWill Deacon <will@kernel.org>
Tue, 29 Sep 2020 15:08:15 +0000 (16:08 +0100)
For better or worse, the world knows about "Spectre" and not about
"Branch predictor hardening". Rename ARM64_HARDEN_BRANCH_PREDICTOR to
ARM64_SPECTRE_V2 as part of moving all of the Spectre mitigations into
their own little corner.

Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/cpucaps.h
arch/arm64/include/asm/kvm_mmu.h
arch/arm64/include/asm/mmu.h
arch/arm64/kernel/cpu_errata.c

index 07b643a707100559ae4e4df475bc969eb6083177..348bfcf6c818db6ddebd9eecb93e38e3328170f0 100644 (file)
@@ -31,7 +31,7 @@
 #define ARM64_HAS_DCPOP                                21
 #define ARM64_SVE                              22
 #define ARM64_UNMAP_KERNEL_AT_EL0              23
-#define ARM64_HARDEN_BRANCH_PREDICTOR          24
+#define ARM64_SPECTRE_V2                       24
 #define ARM64_HAS_RAS_EXTN                     25
 #define ARM64_WORKAROUND_843419                        26
 #define ARM64_HAS_CACHE_IDC                    27
index dfd176b0642e122d72a10bd3a9c20e2b7d7cf6dc..873e12430ac73cc083a1d8282ce3d66471a20465 100644 (file)
@@ -435,14 +435,13 @@ static inline int kvm_write_guest_lock(struct kvm *kvm, gpa_t gpa,
  * EL2 vectors can be mapped and rerouted in a number of ways,
  * depending on the kernel configuration and CPU present:
  *
- * - If the CPU has the ARM64_HARDEN_BRANCH_PREDICTOR cap, the
- *   hardening sequence is placed in one of the vector slots, which is
- *   executed before jumping to the real vectors.
+ * - If the CPU is affected by Spectre-v2, the hardening sequence is
+ *   placed in one of the vector slots, which is executed before jumping
+ *   to the real vectors.
  *
- * - If the CPU has both the ARM64_HARDEN_EL2_VECTORS cap and the
- *   ARM64_HARDEN_BRANCH_PREDICTOR cap, the slot containing the
- *   hardening sequence is mapped next to the idmap page, and executed
- *   before jumping to the real vectors.
+ * - If the CPU also has the ARM64_HARDEN_EL2_VECTORS cap, the slot
+ *   containing the hardening sequence is mapped next to the idmap page,
+ *   and executed before jumping to the real vectors.
  *
  * - If the CPU only has the ARM64_HARDEN_EL2_VECTORS cap, then an
  *   empty slot is selected, mapped next to the idmap page, and
@@ -464,7 +463,7 @@ static inline void *kvm_get_hyp_vector(void)
        void *vect = kern_hyp_va(kvm_ksym_ref(__kvm_hyp_vector));
        int slot = -1;
 
-       if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR) && data->fn) {
+       if (cpus_have_const_cap(ARM64_SPECTRE_V2) && data->fn) {
                vect = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs));
                slot = data->hyp_vectors_slot;
        }
@@ -485,15 +484,15 @@ static inline void *kvm_get_hyp_vector(void)
 static inline int kvm_map_vectors(void)
 {
        /*
-        * HBP  = ARM64_HARDEN_BRANCH_PREDICTOR
+        * SV2  = ARM64_SPECTRE_V2
         * HEL2 = ARM64_HARDEN_EL2_VECTORS
         *
-        * !HBP + !HEL2 -> use direct vectors
-        *  HBP + !HEL2 -> use hardened vectors in place
-        * !HBP +  HEL2 -> allocate one vector slot and use exec mapping
-        *  HBP +  HEL2 -> use hardened vertors and use exec mapping
+        * !SV2 + !HEL2 -> use direct vectors
+        *  SV2 + !HEL2 -> use hardened vectors in place
+        * !SV2 +  HEL2 -> allocate one vector slot and use exec mapping
+        *  SV2 +  HEL2 -> use hardened vertors and use exec mapping
         */
-       if (cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR)) {
+       if (cpus_have_const_cap(ARM64_SPECTRE_V2)) {
                __kvm_bp_vect_base = kvm_ksym_ref(__bp_harden_hyp_vecs);
                __kvm_bp_vect_base = kern_hyp_va(__kvm_bp_vect_base);
        }
index f5e3efeb5b9749f2a5979f76d44f51c1692a7e22..cbff2d42c1d8eabdc508ee75b33066786a551d5f 100644 (file)
@@ -56,7 +56,7 @@ static inline void arm64_apply_bp_hardening(void)
 {
        struct bp_hardening_data *d;
 
-       if (!cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR))
+       if (!cpus_have_const_cap(ARM64_SPECTRE_V2))
                return;
 
        d = arm64_get_bp_hardening_data();
index a72ca57f563000b4024001b7d5b55a17a5491d30..b275f2d5e7a3ebd8f2c69d38b57fbcfdfec43420 100644 (file)
@@ -877,7 +877,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = {
 #endif
        {
                .desc = "Branch predictor hardening",
-               .capability = ARM64_HARDEN_BRANCH_PREDICTOR,
+               .capability = ARM64_SPECTRE_V2,
                .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM,
                .matches = check_branch_predictor,
                .cpu_enable = cpu_enable_branch_predictor_hardening,