[MODERATED] Re: [PATCH 3/4] V8 more sampling fun 3
Josh Poimboeuf <[email protected]> Thu, 16 Apr 2020 12:17:23 -0500
| Newsgroups | org.kernel.lore.historical-speck |
|---|---|
| Message-ID | <20200416171723.zk3lzznvslmtt4zf@treble> |
On Thu, Jan 16, 2020 at 02:16:07PM -0800, speck for mark gross wrote: > From: mark gross <[email protected]> > Subject: [PATCH 3/4] x86/speculation: Special Register Buffer Data Sampling > (SRBDS) mitigation control. Subjects don't need periods. > +static enum srbds_mitigations srbds_mitigation __ro_after_init = SRBDS_MITIGATION_FULL; > +static const char * const srbds_strings[] = { > + [SRBDS_MITIGATION_OFF] = "Vulnerable", > + [SRBDS_MITIGATION_UCODE_NEEDED] = "Vulnerable: No microcode", > + [SRBDS_MITIGATION_FULL] = "Mitigated: Microcode", FWIW, this is at least the third time I've made this comment... s/Mitigated/Mitigation/ > + [SRBDS_MITIGATION_TSX_OFF] = "Mitigated: TSX disabled", s/Mitigated/Mitigation > @@ -1142,6 +1177,26 @@ static void __init cpu_set_bug_bits(struct cpuinfo_x86 *c) > (ia32_cap & ARCH_CAP_TSX_CTRL_MSR))) > setup_force_cpu_bug(X86_BUG_TAA); > > + /* > + * Some parts on the list don't have RDRAND or RDSEED. Make sure > + * they show as "Not affected". > + */ > + if (cpu_has(c, X86_FEATURE_RDRAND) || cpu_has(c, X86_FEATURE_RDSEED)) { > + if (cpu_matches(SRBDS, cpu_vuln_blacklist)) { > + /* > + * Parts in the blacklist that enumerate MDS_NO are > + * only vulnerable if TSX can be used. To handle cases > + * where TSX gets fused off check to see if TSX is > + * fused off and thus not affected. > + */ > + if ((ia32_cap & ARCH_CAP_MDS_NO) && tsx_fused_off(c)) > + goto srbds_not_affected; > + > + setup_force_cpu_bug(X86_BUG_SRBDS); > + } > + } > + > +srbds_not_affected: > if (cpu_matches(NO_MELTDOWN, cpu_vuln_whitelist)) > return; When nitpicking the whitespace before, I think I completely missed the fact that this goto is extremely ugly. And there are a lot of unnecessary nested ifs. And the comment is redundant. How about something like this: /* * Parts in the SRBDS blacklist that enumerate MDS_NO are only * vulnerable if TSX isn't fused off. */ if (cpu_matches(SRBDS, cpu_vuln_blacklist) && (cpu_has(c, X86_FEATURE_RDRAND) || cpu_has(c, X86_FEATURE_RDSEED)) && (!(ia32_cap & ARCH_CAP_MDS_NO) || !tsx_fused_off(c))) setup_force_cpu_bug(X86_BUG_SRBDS); -- Josh