No bits, other than arithmetic ones and the resume flag (which will most
likely change from 1 to 0), can be changed by the instructions we permit.
Extend the check to cover other flags.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
/*
* Un-mirror virtualized state from EFLAGS.
- * Nothing we allow to be emulated can change TF, IF, or IOPL.
+ * Nothing we allow to be emulated can change anything other than the
+ * arithmetic bits, and the resume flag.
*/
- ASSERT(!((regs->_eflags ^ eflags) & (X86_EFLAGS_IF | X86_EFLAGS_IOPL)));
+ ASSERT(!((regs->_eflags ^ eflags) &
+ ~(X86_EFLAGS_RF | X86_EFLAGS_ARITH_MASK)));
regs->_eflags |= X86_EFLAGS_IF;
regs->_eflags &= ~X86_EFLAGS_IOPL;