On Sun, Feb 09, 2020 at 06:17:47PM -0800, Anthony Steinhauser wrote:
> In the current implementation of the TAA mitigation if the cpuid_level
> is 6 and it's an Intel CPU, the sefflags_edx variable is used without
> being initialized. If the SEFF0EDX_ARCH_CAP bit is accidentally flipped
> in it, the rdmsr on the unimplemented MSR_ARCH_CAPABILITIES index leads
> to a #GP fault.
> 
> This change initializes the sefflags_edx variable to 0 which is
> consistent with the MSR_ARCH_CAPABILITIES being unavailable.
> ---
>  sys/arch/amd64/amd64/cpu.c | 2 +-
>  sys/arch/i386/i386/cpu.c   | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/sys/arch/amd64/amd64/cpu.c b/sys/arch/amd64/amd64/cpu.c
> index 48ab6b5e7f3..f9beff0d5e3 100644
> --- a/sys/arch/amd64/amd64/cpu.c
> +++ b/sys/arch/amd64/amd64/cpu.c
> @@ -1164,7 +1164,7 @@ void
>  cpu_tsx_disable(struct cpu_info *ci)
>  {
>       uint64_t msr;
> -     uint32_t dummy, sefflags_edx;
> +     uint32_t dummy, sefflags_edx = 0;
>  
>       /* this runs before identifycpu() populates ci_feature_sefflags_edx */
>       if (cpuid_level >= 0x07)
> diff --git a/sys/arch/i386/i386/cpu.c b/sys/arch/i386/i386/cpu.c
> index b31a431c594..76f1b65bede 100644
> --- a/sys/arch/i386/i386/cpu.c
> +++ b/sys/arch/i386/i386/cpu.c
> @@ -473,7 +473,7 @@ void
>  cpu_tsx_disable(struct cpu_info *ci)
>  {
>       uint64_t msr;
> -     uint32_t dummy, sefflags_edx;
> +     uint32_t dummy, sefflags_edx = 0;
>  
>       /* this runs before identifycpu() populates ci_feature_sefflags_edx */
>       if (cpuid_level >= 0x07)
> -- 
> 2.25.0.341.g760bfbb309-goog
> 

Probably safer to use rdmsr_safe for this sort of thing also.

-ml

Reply via email to