diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index f101510a1b..aa11ecadaa 100644 --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -346,6 +346,8 @@ static unsigned int check_guest_io_breakpoint(struct vcpu *v, case DR_LEN_8: width = 8; break; } + start &= ~(width - 1UL); + if ( (start < (port + len)) && ((start + width) > port) ) match |= 1u << i; }