x86/msr: Correct the emulation behaviour of MSR_PRED_CMD

Experimentally, the behaviour of reserved bits in MSR_PRED_CMD changed between
beta and production microcode, and now raises a #GP fault for set reserved
bits.  The AMD spec for future hardware also specifies this behaviour, and it
is the more sensible behaviour to implement.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Release-acked-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
Andrew Cooper committed 2018-04-16 13:18:19 +01:00
1 parent 87c0718ce7
commit a6aa678fa3
1 file changed
+4 -5
+4 -5
View File
@@ -243,11 +243,10 @@ int guest_wrmsr(struct vcpu *v, uint32_t msr, uint64_t val)
if ( !cp->feat.ibrsb && !cp->extd.ibpb )
goto gp_fault; /* MSR available? */
/*
* The only defined behaviour is when writing PRED_CMD_IBPB. In
* practice, real hardware accepts any value without faulting.
*/
if ( v == curr && (val & PRED_CMD_IBPB) )
if ( val & ~PRED_CMD_IBPB )
goto gp_fault; /* Rsvd bit set? */
if ( v == curr )
wrmsrl(MSR_PRED_CMD, PRED_CMD_IBPB);
break;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.