Separate the validity checking of the page frame in 2 chunks.
authorvhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>
Wed, 25 Jan 2006 11:51:21 +0000 (11:51 +0000)
committervhanquez@kneesa.uk.xensource.com <vhanquez@kneesa.uk.xensource.com>
Wed, 25 Jan 2006 11:51:21 +0000 (11:51 +0000)
give a more accurate error message, and don't call pfn_to_page before
validating the pfn.

Signed-off-by: Vincent Hanquez <vincent@xensource.com>
xen/common/grant_table.c

index 93312868b29088736e348b23276cfe472fd9a55b..7576d715d3a6df9172143ec1b9944d4e04b95e0c 100644 (file)
@@ -719,10 +719,18 @@ gnttab_transfer(
         }
 
         /* Check the passed page frame for basic validity. */
+        if ( unlikely(!pfn_valid(gop.mfn)) )
+        { 
+            DPRINTK("gnttab_transfer: out-of-range %lx\n",
+                    (unsigned long)gop.mfn);
+            (void)__put_user(GNTST_bad_page, &uop[i].status);
+            continue;
+        }
+
         page = pfn_to_page(gop.mfn);
-        if ( unlikely(!pfn_valid(gop.mfn) || IS_XEN_HEAP_FRAME(page)) )
+        if ( unlikely(IS_XEN_HEAP_FRAME(page)) )
         { 
-            DPRINTK("gnttab_transfer: out-of-range or xen frame %lx\n",
+            DPRINTK("gnttab_transfer: xen frame %lx\n",
                     (unsigned long)gop.mfn);
             (void)__put_user(GNTST_bad_page, &uop[i].status);
             continue;