[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] tools/xenpaging: fix bug of Segmentation fault
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1265917805 0 # Node ID eb05347ac47a850927636e0a37c71cab8d1ce919 # Parent f5da4b37f9ca3b3bb08cf483364f3fe98b6ec2e9 tools/xenpaging: fix bug of Segmentation fault Segmentation fault occurs in two situations: 1. argc is less than 3 2. xenpaging_init() fault Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx> --- tools/xenpaging/xenpaging.c | 36 +++++++++++++++++++++++++----------- 1 files changed, 25 insertions(+), 11 deletions(-) diff -r f5da4b37f9ca -r eb05347ac47a tools/xenpaging/xenpaging.c --- a/tools/xenpaging/xenpaging.c Thu Feb 11 19:49:31 2010 +0000 +++ b/tools/xenpaging/xenpaging.c Thu Feb 11 19:50:05 2010 +0000 @@ -212,6 +212,9 @@ int xenpaging_teardown(xenpaging_t *pagi { int rc; + if ( paging == NULL ) + return 0; + /* Tear down domain paging in Xen */ rc = xc_mem_event_disable(paging->xc_handle, paging->mem_event.domain_id); if ( rc != 0 ) @@ -447,19 +450,28 @@ static int evict_victim(xenpaging_t *pag int main(int argc, char *argv[]) { - domid_t domain_id = atoi(argv[1]); - int num_pages = atoi(argv[2]); + domid_t domain_id; + int num_pages; xenpaging_t *paging; - xenpaging_victim_t victims[num_pages]; + xenpaging_victim_t *victims; mem_event_request_t req; mem_event_response_t rsp; int i; - int rc; + int rc = -1, rc1; int open_flags = O_CREAT | O_TRUNC | O_RDWR; mode_t open_mode = S_IRUSR | S_IRGRP | S_IROTH | S_IWUSR | S_IWGRP | S_IWOTH; char filename[80]; int fd; + + if ( argc != 3 ) { + fprintf(stderr, "Usage: %s <domain_id> <num_pages>\n", argv[0]); + return -1; + } + domain_id = atoi(argv[1]); + num_pages = atoi(argv[2]); + + victims = calloc(num_pages, sizeof(xenpaging_victim_t)); /* Open file */ sprintf(filename, "page_cache_%d", domain_id); @@ -586,15 +598,17 @@ int main(int argc, char *argv[]) } out: + free(victims); + /* Tear down domain paging */ - rc = xenpaging_teardown(paging); - if ( rc != 0 ) - { + rc1 = xenpaging_teardown(paging); + if ( rc1 != 0 ) ERROR("Error tearing down paging"); - exit(1); - } - - return 0; + + if ( rc == 0 ) + rc = rc1; + + return rc; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |