Re: Avoid speculative indirect calls in kernel

From: Paolo Bonzini
Date: Wed Jan 03 2018 - 20:42:03 EST


On 04/01/2018 00:51, Linus Torvalds wrote:
> On Wed, Jan 3, 2018 at 3:09 PM, Andi Kleen <andi@xxxxxxxxxxxxxx> wrote:
>> This is a fix for Variant 2 in
>> https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html
>>
>> Any speculative indirect calls in the kernel can be tricked
>> to execute any kernel code, which may allow side channel
>> attacks that can leak arbitrary kernel data.
>
> Why is this all done without any configuration options?
>
> A *competent* CPU engineer would fix this by making sure speculation
> doesn't happen across protection domains. Maybe even a L1 I$ that is
> keyed by CPL.

It's not that simple; Andi's patches don't fix this yet, but there's
also the case of context switching, where two processes run in the same
protection domain and still shouldn't be able to interfere with each other.

But then, exactly because the retpoline approach adds quite some cruft
and leaves something to be desired, why even bother? Intel has also
started releasing microcode updates that basically add some chicken bits
and also let you flush branch predictor state to handle the context
switch case. Why not just require people to have their microcode
updated, and DTRT from the beginning?

Also, according to Google the KVM PoC can be broken simply by clearing
the registers on every exit to the hypervisor. Of course it's just
mitigation, but perhaps _that_ is where we should start fixing the
user/kernel boundary too.

Paolo

> I think somebody inside of Intel needs to really take a long hard look
> at their CPU's, and actually admit that they have issues instead of
> writing PR blurbs that say that everything works as designed.
>
> .. and that really means that all these mitigation patches should be
> written with "not all CPU's are crap" in mind.
>
> Or is Intel basically saying "we are committed to selling you shit
> forever and ever, and never fixing anything"?
>
> Because if that's the case, maybe we should start looking towards the
> ARM64 people more.
>
> Please talk to management. Because I really see exactly two possibibilities:
>
> - Intel never intends to fix anything
>
> OR
>
> - these workarounds should have a way to disable them.
>
> Which of the two is it?
>
> Linus
>