From: Patrick Colp Date: Thu, 29 Jul 2010 15:53:40 +0000 (+0100) Subject: tools/xenpaging: Fix some memory leaks on error paths. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11710 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=c72acc065b1d3ef027b9b3e60a60e6ce282d52c6;p=xen.git tools/xenpaging: Fix some memory leaks on error paths. This isn't directly related to EPT checking, but does some general fix-ups to the xenpaging code (adds some extra frees, etc.) Signed-off-by: Patrick Colp Committed-by: Ian Jackson --- diff --git a/tools/xenpaging/xenpaging.c b/tools/xenpaging/xenpaging.c index 73debc85f7..31da5a49ed 100644 --- a/tools/xenpaging/xenpaging.c +++ b/tools/xenpaging/xenpaging.c @@ -73,8 +73,9 @@ xenpaging_t *xenpaging_init(xc_interface **xch_r, domid_t domain_id) xc_interface *xch; int rc; - xch = xc_interface_open(0,0,0); - if ( !xch ) return NULL; + xch = xc_interface_open(NULL, NULL, 0); + if ( !xch ) + goto err_iface; DPRINTF("xenpaging init\n"); *xch_r = xch; @@ -101,7 +102,7 @@ xenpaging_t *xenpaging_init(xc_interface **xch_r, domid_t domain_id) paging->mem_event.ring_page = init_page(); if ( paging->mem_event.ring_page == NULL ) { - ERROR("Error initialising shared page"); + ERROR("Error initialising ring page"); goto err; } @@ -199,13 +200,27 @@ xenpaging_t *xenpaging_init(xc_interface **xch_r, domid_t domain_id) return paging; err: - if ( paging->bitmap ) + if ( paging ) + { + if ( paging->mem_event.shared_page ) + { + munlock(paging->mem_event.shared_page, PAGE_SIZE); + free(paging->mem_event.shared_page); + } + + if ( paging->mem_event.ring_page ) + { + munlock(paging->mem_event.ring_page, PAGE_SIZE); + free(paging->mem_event.ring_page); + } + free(paging->bitmap); - if ( paging->platform_info ) free(paging->platform_info); - if ( paging ) + free(paging->domain_info); free(paging); + } + err_iface: return NULL; } @@ -619,6 +634,8 @@ int main(int argc, char *argv[]) if ( rc == 0 ) rc = rc1; + xc_interface_close(xch); + return rc; }