|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/spec-ctrl: Support for SRSO_US_NO and SRSO_MSR_FIX
On 26.03.2024 12:33, Andrew Cooper wrote:
> On 26/03/2024 9:13 am, Jan Beulich wrote:
>> On 25.03.2024 19:18, Andrew Cooper wrote:
>>> + /* Avoid reading BP_CFG if we don't intend to change anything. */
>>> + if (!new)
>>> return;
>>>
>>> rdmsrl(MSR_AMD64_BP_CFG, val);
>>>
>>> - if (val & chickenbit)
>>> + if ((val & new) == new)
>>> return;
>> Since bits may also need turning off:
>>
>> if (!((val ^ new) & (BP_CFG_SPEC_REDUCE | (1 << 5))))
>> return;
>>
>> and the !new early-out dropped, too? Looks like this wasn't quite right
>> before, either.
>
> That's adding unnecessary complexity. It's unlikely that we'll ever
> need to clear bits like this.
Okay. Half a sentence in a comment would be nice, to make clear the
behavior is intended to only ever set bits.
>>> @@ -1078,22 +1082,41 @@ static void __init ibpb_calculations(void)
>>> * Confusion. Mitigate with IBPB-on-entry.
>>> */
>>> if ( !boot_cpu_has(X86_FEATURE_BTC_NO) )
>>> - def_ibpb_entry = true;
>>> + def_ibpb_entry_pv = def_ibpb_entry_hvm = true;
>>>
>>> /*
>>> - * Further to BTC, Zen3/4 CPUs suffer from Speculative Return Stack
>>> - * Overflow in most configurations. Mitigate with IBPB-on-entry
>>> if we
>>> - * have the microcode that makes this an effective option.
>>> + * Further to BTC, Zen3 and later CPUs suffer from Speculative
>>> Return
>>> + * Stack Overflow in most configurations. Mitigate with
>>> IBPB-on-entry
>>> + * if we have the microcode that makes this an effective option,
>>> + * except where there are other mitigating factors available.
>>> */
>> Hmm, is "Zen3 and later" really appropriate?
>
> Yes.
>
> SRSO isn't fixed until SRSO_NO is enumerated.
IOW even on Zen5 that's going to be only by ucode update?
>>> --- a/xen/include/public/arch-x86/cpufeatureset.h
>>> +++ b/xen/include/public/arch-x86/cpufeatureset.h
>>> @@ -304,7 +304,9 @@ XEN_CPUFEATURE(FSRSC, 11*32+19) /*A Fast
>>> Short REP SCASB */
>>> XEN_CPUFEATURE(AMD_PREFETCHI, 11*32+20) /*A PREFETCHIT{0,1}
>>> Instructions */
>>> XEN_CPUFEATURE(SBPB, 11*32+27) /*A Selective Branch
>>> Predictor Barrier */
>>> XEN_CPUFEATURE(IBPB_BRTYPE, 11*32+28) /*A IBPB flushes Branch Type
>>> predictions too */
>>> -XEN_CPUFEATURE(SRSO_NO, 11*32+29) /*A Hardware not vulenrable
>>> to Speculative Return Stack Overflow */
>>> +XEN_CPUFEATURE(SRSO_NO, 11*32+29) /*A Hardware not vulnerable
>>> to Speculative Return Stack Overflow */
>>> +XEN_CPUFEATURE(SRSO_US_NO, 11*32+30) /*A Hardware not vulnerable
>>> to SRSO across the User/Supervisor boundary */
>> Can we validly expose this to 64-bit PV guests, where there's no CPL
>> boundary? Or else isn't my "x86/PV: issue branch prediction barrier
>> when switching 64-bit guest to kernel mode" needed as a prereq?
>
> Based on uarch details, if BP-SPEC-REDUCE is active, we can advertise
> SRSO_US_NO to PV guests.
Which would make it at best !A, for the PV exposure then depending on
the HVM side choice.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |