mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
x86/hvm: don't leave emulator in inconsistent state
The fact that handle_mmio(), and thus the instruction emulator, is being run through twice for emulations that require involvement of the device model, allows for the second run to see a different guest state than the first one. Since only the MMIO-specific emulation routines update the vCPU's io_state, if they get invoked on the second pass, internal state (and particularly this variable) can be left in a state making successful emulation of a subsequent MMIO operation impossible. Consequently, whenever the emulator invocation returns without requesting a retry of the guest instruction, reset io_state. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
d82a726d15
commit
09dc3b63b3
1 file changed
+2
@@ -179,6 +179,8 @@ int handle_mmio(void)
|
||||
|
||||
rc = hvm_emulate_one(&ctxt);
|
||||
|
||||
if ( rc != X86EMUL_RETRY )
|
||||
vio->io_state = HVMIO_none;
|
||||
if ( vio->io_state == HVMIO_awaiting_completion )
|
||||
vio->io_state = HVMIO_handle_mmio_awaiting_completion;
|
||||
else
|
||||
|
||||