]> xenbits.xensource.com Git - xen.git/commitdiff
KEXEC: fix kexec_get_range_compat to fail vocally.
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 7 Mar 2012 08:55:57 +0000 (08:55 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 7 Mar 2012 08:55:57 +0000 (08:55 +0000)
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 <andrew.cooper3@citrix.com>
Simplify the bitwise arithmetic a bit.

Signed-off-by: Keir Fraser <keir@xen.org>
xen-unstable changeset:   24358:9961a6d5356a
xen-unstable date:        Mon Dec 05 19:42:46 2011 +0000

xen/common/kexec.c

index d2d5fde321beb3a3dc1abeb5cffcf49fc1e4b8cd..a49eeacc95292464a6b15a639273863a69b882af 100644 (file)
@@ -295,6 +295,10 @@ static int kexec_get_range_compat(XEN_GUEST_HANDLE(void) uarg)
 
     ret = kexec_get_range_internal(&range);
 
+    /* Dont silently truncate physical addresses or sizes. */
+    if ( (range.start | range.size) & ~(unsigned long)(~0u) )
+        return -ERANGE;
+
     if ( ret == 0 ) {
         XLAT_kexec_range(&compat_range, &range);
         if ( unlikely(copy_to_guest(uarg, &compat_range, 1)) )