kvm: x86: Prevent sign extension of DR7 in guest debugging mode
PATCH 1/1 kvm: x86: Prevent sign extension of DR7 in guest debugging mode
From: Jan Kiszka <[email protected]>
This unbreaks guest debugging when the 4th hardware breakpoint used for guest debugging is a watchpoint of 4 or 8 byte lenght. The 31st bit of DR7 is set in that case and used to cause a sign extension to the high word which was breaking the guest state (vm entry failure).
Signed-off-by Jan Kiszka <[email protected]>
--- target-i386/kvm.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
target-i386/kvm.c +1 -1
@@ -1693,7 +1693,7 @@ void kvm_arch_update_guest_debug(CPUState *env, struct kvm_guest_debug *dbg) dbg->arch.debugreg[n] = hw_breakpoint[n].addr; dbg->arch.debugreg[7 ] |= (2 << (n *2 )) | (type_code[hw_breakpoint[n].type] << (16 + n*4 )) | - (len_code[hw_breakpoint[n].len] << (18 + n*4 )); + ((uint32_t )len_code[hw_breakpoint[n].len] << (18 + n*4 )); } }/* Legal xcr0 for loading */
Signature · 1 line
1.7.1
Avi Kivity
AppliedQuoted 6 lines · Jan Kiszka
From: Jan Kiszka<[email protected]>
This unbreaks guest debugging when the 4th hardware breakpoint used for guest debugging is a watchpoint of 4 or 8 byte lenght. The 31st bit of DR7 is set in that case and used to cause a sign extension to the high word which was breaking the guest state (vm entry failure).
Applied to uq/master, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function