diff -r 4142bfd01e02 tools/libxc/xc_linux_build.c --- a/tools/libxc/xc_linux_build.c Thu Jun 1 11:25:02 2006 +0100 +++ b/tools/libxc/xc_linux_build.c Thu Jun 1 14:28:41 2006 -0400 @@ -714,7 +714,16 @@ static int setup_guest(int xc_handle, vstack_end = vstack_start + PAGE_SIZE; v_end = (vstack_end + (1UL<<22)-1) & ~((1UL<<22)-1); if ( (v_end - vstack_end) < (512UL << 10) ) - v_end += 1UL << 22; /* Add extra 4MB to get >= 512kB padding. */ + { + /* Check if v_end is wrapping around to 0 */ + if ( (1UL << 22) < -(v_end) ) + v_end += 1UL << 22; /* Add extra 4MB to get >= 512kB padding. */ + else + { + ERROR("v_end wrapped around to 0"); + goto error_out; + } + } #define NR(_l,_h,_s) \ (((((_h) + ((1UL<<(_s))-1)) & ~((1UL<<(_s))-1)) - \ ((_l) & ~((1UL<<(_s))-1))) >> (_s))