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

[libvirt] [PATCH 2/3] nodeinfo: report error when given node is out of range



https://bugzilla.redhat.com/show_bug.cgi?id=1145050

Signed-off-by: Jincheng Miao <jmiao redhat com>
---
 src/nodeinfo.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/nodeinfo.c b/src/nodeinfo.c
index af23b8b..1728891 100644
--- a/src/nodeinfo.c
+++ b/src/nodeinfo.c
@@ -2028,16 +2028,34 @@ nodeGetFreePages(unsigned int npages,
                  unsigned long long *counts)
 {
     int ret = -1;
-    int cell;
+    int cell, lastCell;
     size_t i, ncounts = 0;
 
-    for (cell = startCell; cell < (int) (startCell + cellCount); cell++) {
+    if ((lastCell = virNumaGetMaxNode()) < 0)
+        return 0;
+
+    if (startCell > lastCell) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("start cell %d out of range (0-%d)"),
+                       startCell, lastCell);
+        goto cleanup;
+    }
+
+    lastCell = startCell + cellCount;
+    if (startCell + cellCount < lastCell)
+        lastCell = startCell + cellCount;
+
+    for (cell = startCell; cell < lastCell; cell++) {
         for (i = 0; i < npages; i++) {
             unsigned int page_size = pages[i];
             unsigned int page_free;
 
-            if (virNumaGetPageInfo(cell, page_size, 0, NULL, &page_free) < 0)
+            if (virNumaGetPageInfo(cell, page_size, 0, NULL, &page_free) < 0) {
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("Failed to get %dKib page info of cell %d"),
+                               page_size, cell);
                 goto cleanup;
+            }
 
             counts[ncounts++] = page_free;
         }
-- 
1.8.3.1


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