| From 18fce56134c987e5b4eceddafdbe4b00c07e2ae1 Mon Sep 17 00:00:00 2001 |
| From: Marc Zyngier <maz@kernel.org> |
| Date: Thu, 16 Jul 2020 17:11:09 +0100 |
| Subject: arm64: Run ARCH_WORKAROUND_1 enabling code on all CPUs |
| |
| From: Marc Zyngier <maz@kernel.org> |
| |
| commit 18fce56134c987e5b4eceddafdbe4b00c07e2ae1 upstream. |
| |
| Commit 73f381660959 ("arm64: Advertise mitigation of Spectre-v2, or lack |
| thereof") changed the way we deal with ARCH_WORKAROUND_1, by moving most |
| of the enabling code to the .matches() callback. |
| |
| This has the unfortunate effect that the workaround gets only enabled on |
| the first affected CPU, and no other. |
| |
| In order to address this, forcefully call the .matches() callback from a |
| .cpu_enable() callback, which brings us back to the original behaviour. |
| |
| Fixes: 73f381660959 ("arm64: Advertise mitigation of Spectre-v2, or lack thereof") |
| Cc: <stable@vger.kernel.org> |
| Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com> |
| Signed-off-by: Marc Zyngier <maz@kernel.org> |
| Signed-off-by: Will Deacon <will@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/arm64/kernel/cpu_errata.c | 8 ++++++++ |
| 1 file changed, 8 insertions(+) |
| |
| --- a/arch/arm64/kernel/cpu_errata.c |
| +++ b/arch/arm64/kernel/cpu_errata.c |
| @@ -599,6 +599,12 @@ check_branch_predictor(const struct arm6 |
| return (need_wa > 0); |
| } |
| |
| +static void |
| +cpu_enable_branch_predictor_hardening(const struct arm64_cpu_capabilities *cap) |
| +{ |
| + cap->matches(cap, SCOPE_LOCAL_CPU); |
| +} |
| + |
| static const __maybe_unused struct midr_range tx2_family_cpus[] = { |
| MIDR_ALL_VERSIONS(MIDR_BRCM_VULCAN), |
| MIDR_ALL_VERSIONS(MIDR_CAVIUM_THUNDERX2), |
| @@ -890,9 +896,11 @@ const struct arm64_cpu_capabilities arm6 |
| }, |
| #endif |
| { |
| + .desc = "Branch predictor hardening", |
| .capability = ARM64_HARDEN_BRANCH_PREDICTOR, |
| .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, |
| .matches = check_branch_predictor, |
| + .cpu_enable = cpu_enable_branch_predictor_hardening, |
| }, |
| #ifdef CONFIG_RANDOMIZE_BASE |
| { |