|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-3.4-testing] Fix domain reference leak
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1265794124 0
# Node ID 407d29f3d20e0d2c46352423840282e477a3b8ce
# Parent bd2f6ae5540a2a2a691576f82865a5bd266f32ce
Fix domain reference leak
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
xen-unstable changeset: 20918:a3fa6d444b25
xen-unstable date: Wed Feb 10 09:18:43 2010 +0000
---
xen/arch/x86/mm.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff -r bd2f6ae5540a -r 407d29f3d20e xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Mon Feb 08 11:52:37 2010 +0000
+++ b/xen/arch/x86/mm.c Wed Feb 10 09:28:44 2010 +0000
@@ -3552,6 +3552,7 @@ int steal_page(
struct domain *d, struct page_info *page, unsigned int memflags)
{
unsigned long x, y;
+ bool_t drop_dom_ref = 0;
spin_lock(&d->page_alloc_lock);
@@ -3579,11 +3580,13 @@ int steal_page(
} while ( (y = cmpxchg(&page->count_info, x, x | 1)) != x );
/* Unlink from original owner. */
- if ( !(memflags & MEMF_no_refcount) )
- d->tot_pages--;
+ if ( !(memflags & MEMF_no_refcount) && !--d->tot_pages )
+ drop_dom_ref = 1;
page_list_del(page, &d->page_list);
spin_unlock(&d->page_alloc_lock);
+ if ( unlikely(drop_dom_ref) )
+ put_domain(d);
return 0;
fail:
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-3.4-testing] Fix domain reference leak,
Xen patchbot-3.4-testing <=
|
|
|
|
|