From: Keir Fraser Date: Fri, 19 Oct 2007 13:30:10 +0000 (+0100) Subject: x86: Fix get_page_from_l1e() and avoid host crash on 'xm save'. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~14847^2~14 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=02ae00123e864a93b4dfbc48b9c2d04a4d131aba;p=xen.git x86: Fix get_page_from_l1e() and avoid host crash on 'xm save'. Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index d25fba7674..76036da607 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -152,7 +152,8 @@ unsigned long total_pages; #define PAGE_CACHE_ATTRS (_PAGE_PAT|_PAGE_PCD|_PAGE_PWT) #define l1_disallow_mask(d) \ - ((rangeset_is_empty((d)->iomem_caps) && \ + ((d != dom_io) && \ + (rangeset_is_empty((d)->iomem_caps) && \ rangeset_is_empty((d)->arch.ioport_caps)) ? \ L1_DISALLOW_MASK : (L1_DISALLOW_MASK & ~PAGE_CACHE_ATTRS)) @@ -619,17 +620,15 @@ get_page_from_l1e( { unsigned long mfn = l1e_get_pfn(l1e); struct page_info *page = mfn_to_page(mfn); - unsigned int disallow_mask; int okay; if ( !(l1e_get_flags(l1e) & _PAGE_PRESENT) ) return 1; - disallow_mask = l1_disallow_mask((d == dom_io) ? current->domain : d); - if ( unlikely(l1e_get_flags(l1e) & disallow_mask) ) + if ( unlikely(l1e_get_flags(l1e) & l1_disallow_mask(d)) ) { MEM_LOG("Bad L1 flags %x", - l1e_get_flags(l1e) & disallow_mask); + l1e_get_flags(l1e) & l1_disallow_mask(d)); return 0; } diff --git a/xen/common/rangeset.c b/xen/common/rangeset.c index 79a09f894e..5c1b73cefe 100644 --- a/xen/common/rangeset.c +++ b/xen/common/rangeset.c @@ -263,7 +263,7 @@ int rangeset_contains_singleton( int rangeset_is_empty( struct rangeset *r) { - return list_empty(&r->range_list); + return ((r == NULL) || list_empty(&r->range_list)); } struct rangeset *rangeset_new(