CVE-2015-4164
http://xenbits.xen.org/xsa/advisory-136.html
vulnerability in the iret hypercall handler
A buggy loop in Xen’s compat_iret() function iterates the wrong way around a 32-bit index. Any 32-bit PV guest kernel can trigger this vulnerability by attempting a hypercall_iret with EFLAGS.VM set.
Given the use of __get/put_user(), and that the virtual addresses in question are contained within the lower canonical half, the guest cannot clobber any hypervisor data. Instead, Xen will take up to 233 pagefaults, in sequence, effectively hanging the host.
logic error (buggy loop)
http://xenbits.xen.org/xsa/xsa136.patch
--- a/xen/arch/x86/x86_64/compat/traps.c
+++ b/xen/arch/x86/x86_64/compat/traps.c
@@ -119,7 +119,7 @@ unsigned int compat_iret(void)
}
else if ( ksp > regs->_esp )
{
- for (i = 9; i > 0; ++i)
+ for ( i = 9; i > 0; --i )
{
rc |= __get_user(x, (u32 *)regs->rsp + i);
rc |= __put_user(x, (u32 *)(unsigned long)ksp + i);
Malicious guest administrators can cause a denial of service affecting the whole system.
DoS