KEXEC: fix kexec_get_range_compat to fail vocally. Fail with -ERANGE rather than silently truncating 64bit values (a physical address and size) into 32bit integers for dom0 to consume. Signed-off-by: Andrew Cooper diff -r df7cec2c6c03 xen/common/kexec.c --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -395,6 +395,12 @@ static int kexec_get_range_compat(XEN_GU ret = kexec_get_range_internal(&range); +#define RANGE_MASK (((unsigned long)-1) & ~((unsigned int)-1)) + /* Dont silently truncate physical addresses or sizes. */ + if ( range.start & RANGE_MASK || range.size & RANGE_MASK ) + return -ERANGE; +#undef RANGE_MASK + if ( ret == 0 ) { XLAT_kexec_range(&compat_range, &range); if ( unlikely(copy_to_guest(uarg, &compat_range, 1)) )