]> xenbits.xensource.com Git - xen.git/commitdiff
xmalloc: make whole pages xfree() clear the order field (ab)used by xmalloc()
authorJan Beulich <jbeulich@suse.com>
Thu, 12 Sep 2013 09:15:24 +0000 (11:15 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 12 Sep 2013 09:15:24 +0000 (11:15 +0200)
Not doing this was found to cause problems with sequences of allocation
(multi-page), freeing, and then again allocation of the same page upon
boot when interrupts are still disabled (causing the owner field to be
non-zero, thus making the allocator attempt a TLB flush and, in its
processing, triggering an assertion).

Reported-by: Tomasz Wroblewski <tomasz.wroblewski@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Tested-by: Tomasz Wroblewski <tomasz.wroblewski@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
master commit: 0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8
master date: 2013-09-09 14:34:12 +0200

xen/common/xmalloc_tlsf.c

index f19fb85f1fbff6b4134ea9877deaf08fd51ef79d..d3bdfa7d57a0d3b20b8f25db0076542ad2d93e66 100644 (file)
@@ -629,6 +629,7 @@ void xfree(void *p)
         unsigned int i, order = get_order_from_pages(size);
 
         BUG_ON((unsigned long)p & ((PAGE_SIZE << order) - 1));
+        PFN_ORDER(virt_to_page(p)) = 0;
         for ( i = 0; ; ++i )
         {
             if ( !(size & (1 << i)) )