[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