mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
87c0718ce7
commit
a6aa678fa3
1 file changed
+4
-5
+4
-5
@@ -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;
|
||||
|
||||
|
||||