----- d...@amazon.co.uk wrote:

> On Wed, 2018-01-10 at 10:41 -0500, Konrad Rzeszutek Wilk wrote:
> > On Wed, Jan 10, 2018 at 03:28:43PM +0100, Paolo Bonzini wrote:
> > > On 10/01/2018 15:06, Arjan van de Ven wrote:
> > > > On 1/10/2018 5:20 AM, Paolo Bonzini wrote:
> > > >> * a simple specification that does "IBRS=1 blocks indirect
> > branch
> > > >> prediction altogether" would actually satisfy the
> specification
> > just as
> > > >> well, and it would be nice to know if that's what the
> processor
> > actually
> > > >> does.
> > > > 
> > > > it doesn't exactly, not for all.
> > > > 
> > > > so you really do need to write ibrs again.
> > > 
> > > Okay, so "always set IBRS=1" does *not* protect against variant
> 2. 
> > Thanks,
> > 
> > And what is the point of this "always set IBRS=1" then? Are there
> > some other things lurking in the shadows?
> 
> Yes. *FUTURE* CPUs will have a mode where you can just set IBRS and
> leave it set for ever and not worry about any of this, and the
> performance won't even suck.
> 
> Quite why it's still an option you have to set in an MSR, and not
> just
> a feature bit that they advertise and do it unconditionally, I have
> no
> idea. But apparently that's the plan.
> 
> But no current hardware will do this; they've done the best they can
> do
> with microcode already.

I'm still a bit confused here (maybe I'm not the only one), but I have the 
following pending questions:
(I really hope someone from Intel will clarify these)

(1) On VMEntry, Intel recommends to just restore SPEC_CTRL to guest value 
(using WRMSR or MSR save/load list) and that's it. As I previously said to Jim, 
I am missing here a mechanism which should be responsible for hiding host's BHB 
& RSB from guest. Therefore, guest still have the possibility to info-leak 
host's kernel module addresses (kvm-intel.ko / kvm.ko / vmlinux).
* a) As I currently understand things, the only available solution to this is 
to issue an IBPB and stuff RSB on every VMEntry before resuming the guest. The 
IBPB is done to clear host's BTB/BHB and the stuff RSB is done to overwrite all 
host's RSB entries.
* b) Does "IBRS ALL THE TIME" usage change this in some aspect? What is Intel 
recommendation to handle this info-leak in that usage?

(2) On VMExit, Intel recommends to always save guest SPEC_CTRL value, set IBRS 
to 1 (even if it is already set by guest) and stuff RSB. What exactly does this 
write of 1 to IBRS do? 
* a) Does it keep all currently existing BTB/BHB entries created by 
less-privileged prediction-mode and marks them as were created in 
less-privileged prediction-mode such that they won't be used in current 
prediction-mode?
* b) Or does it, as Paolo has mentioned multiple times, disables the branch 
predictor to never consult the BTB/BHB at all as long as IBRS=1?
If (b) is true, why is setting IBRS=1 better than just issue an IBPB that 
clears all entries? At least in that case the host kernel could still benefict 
branch prediction performance boost.
If (a) is true, does "IBRS ALL THE TIME" usage is basically a CPU change to 
just create all BTB/BHB entries to be tagged with prediction-mode at 
creation-time and that tag to be compared to current prediction-mode when CPU 
attempts to use BTB/BHB?

Regards,
-Liran

Reply via email to