bitkeeper revision 1.1159.223.79 (42082ea1obdbIutzD0IY-9Fdcf7Exw)
authoriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Tue, 8 Feb 2005 03:14:41 +0000 (03:14 +0000)
committeriap10@labyrinth.cl.cam.ac.uk <iap10@labyrinth.cl.cam.ac.uk>
Tue, 8 Feb 2005 03:14:41 +0000 (03:14 +0000)
Fix to memory debugging audit code.

Signed-off-by: ian@xensource.com
xen/arch/x86/memory.c

index 486d6ba407abf181790e617172f7fd2ee571a6b4..e438ed68b871dc84423caec9022d605c0681549f 100644 (file)
@@ -2279,7 +2279,6 @@ void audit_domain(struct domain *d)
     }
 
     /* PHASE 3 */
-
     list_ent = d->page_list.next;
     for ( i = 0; (list_ent != &d->page_list); i++ )
     {
@@ -2300,7 +2299,12 @@ void audit_domain(struct domain *d)
                 if ( pt[i] & _PAGE_PRESENT )
                 {
                     unsigned long l1pfn = pt[i]>>PAGE_SHIFT;
-                    struct pfn_info *l1page = &frame_table[l1pfn];
+                    struct pfn_info *l1page;
+
+                    if (l1pfn>max_page)
+                        continue;
+
+                    l1page = &frame_table[l1pfn];
 
                     if ( l1page->u.inuse.domain == d)
                         adjust(l1page, 1, 1);
@@ -2321,7 +2325,12 @@ void audit_domain(struct domain *d)
                 if ( pt[i] & _PAGE_PRESENT )
                 {
                     unsigned long l1pfn = pt[i]>>PAGE_SHIFT;
-                    struct pfn_info *l1page = &frame_table[l1pfn];
+                    struct pfn_info *l1page;
+
+                    if (l1pfn>max_page)
+                        continue;
+
+                    l1page = &frame_table[l1pfn];
 
                     if ( (l1page->u.inuse.domain != d) ||
                          (l1pfn < 0x100) || (l1pfn > max_page) )