From 00b2317a660fbf045f07bb1d25094850c9954b1d Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 23 Jun 2014 09:10:04 +0200 Subject: [PATCH] util: numa: Catch readdir errors in virNumaGetPages Don't return possibly incomplete result if virDirRead fails. --- src/util/virnuma.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/util/virnuma.c b/src/util/virnuma.c index c8e7f40ddf..9cf5a75a9a 100644 --- a/src/util/virnuma.c +++ b/src/util/virnuma.c @@ -728,6 +728,7 @@ virNumaGetPages(int node, int ret = -1; char *path = NULL; DIR *dir = NULL; + int direrr; struct dirent *entry; unsigned int *tmp_size = NULL, *tmp_avail = NULL, *tmp_free = NULL; unsigned int ntmp = 0; @@ -768,7 +769,7 @@ virNumaGetPages(int node, goto cleanup; } - while (virDirRead(dir, &entry, path) > 0) { + while ((direrr = virDirRead(dir, &entry, path)) > 0) { const char *page_name = entry->d_name; unsigned int page_size, page_avail = 0, page_free = 0; char *end; @@ -805,6 +806,9 @@ virNumaGetPages(int node, ntmp++; } + if (direrr < 0) + goto cleanup; + /* Just to produce nice output, sort the arrays by increasing page size */ do { exchange = false; -- GitLab