[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] xmalloc: make whole pages xfree() clear the order field (ab)used by xmalloc()



commit 0fbf3208d9c1a568aeeb61d9f4fbca03b1cfa1f8
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Sep 9 14:34:12 2013 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Sep 9 14:34:12 2013 +0200

    xmalloc: make whole pages xfree() clear the order field (ab)used by 
xmalloc()
    
    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@xxxxxxxxxx>
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Tested-by: Tomasz Wroblewski <tomasz.wroblewski@xxxxxxxxxx>
    Acked-by: Keir Fraser <keir@xxxxxxx>
---
 xen/common/xmalloc_tlsf.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/xen/common/xmalloc_tlsf.c b/xen/common/xmalloc_tlsf.c
index f19fb85..d3bdfa7 100644
--- a/xen/common/xmalloc_tlsf.c
+++ b/xen/common/xmalloc_tlsf.c
@@ -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)) )
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.