[libvirt] [PATCH] Fix off-by-one check in QEMU memory stats

Daniel P. Berrange berrange at redhat.com
Wed Apr 14 10:22:05 UTC 2010


The QEMU memory stats JSON monitor command was too cautious in
checking array bounds, dropping the last requested stat

* src/qemu/qemu_monitor_json.c: Fix off-by-1 check in memory
  stats
---
 src/qemu/qemu_monitor_json.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 7c0d372..3c97e9d 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -965,7 +965,7 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
                 goto cleanup;
             }
 
-            if (virJSONValueObjectHasKey(data, "mem_swapped_in") && (got < (nr_stats-1))) {
+            if (virJSONValueObjectHasKey(data, "mem_swapped_in") && (got < nr_stats)) {
                 if (virJSONValueObjectGetNumberUlong(data, "mem_swapped_in", &mem) < 0) {
                     qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                     _("info balloon reply was missing balloon mem_swapped_in"));
@@ -976,7 +976,7 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
                 stats[got].val = (mem/1024);
                 got++;
             }
-            if (virJSONValueObjectHasKey(data, "mem_swapped_out") && (got < (nr_stats-1))) {
+            if (virJSONValueObjectHasKey(data, "mem_swapped_out") && (got < nr_stats)) {
                 if (virJSONValueObjectGetNumberUlong(data, "mem_swapped_out", &mem) < 0) {
                     qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                     _("info balloon reply was missing balloon mem_swapped_out"));
@@ -987,7 +987,7 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
                 stats[got].val = (mem/1024);
                 got++;
             }
-            if (virJSONValueObjectHasKey(data, "major_page_faults") && (got < (nr_stats-1))) {
+            if (virJSONValueObjectHasKey(data, "major_page_faults") && (got < nr_stats)) {
                 if (virJSONValueObjectGetNumberUlong(data, "major_page_faults", &mem) < 0) {
                     qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                     _("info balloon reply was missing balloon major_page_faults"));
@@ -998,7 +998,7 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
                 stats[got].val = mem;
                 got++;
             }
-            if (virJSONValueObjectHasKey(data, "minor_page_faults") && (got < (nr_stats-1))) {
+            if (virJSONValueObjectHasKey(data, "minor_page_faults") && (got < nr_stats)) {
                 if (virJSONValueObjectGetNumberUlong(data, "minor_page_faults", &mem) < 0) {
                     qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                     _("info balloon reply was missing balloon minor_page_faults"));
@@ -1009,7 +1009,7 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
                 stats[got].val = mem;
                 got++;
             }
-            if (virJSONValueObjectHasKey(data, "free_mem") && (got < (nr_stats-1))) {
+            if (virJSONValueObjectHasKey(data, "free_mem") && (got < nr_stats)) {
                 if (virJSONValueObjectGetNumberUlong(data, "free_mem", &mem) < 0) {
                     qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                     _("info balloon reply was missing balloon free_mem"));
@@ -1020,7 +1020,7 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon,
                 stats[got].val = (mem/1024);
                 got++;
             }
-            if (virJSONValueObjectHasKey(data, "total_mem") && (got < (nr_stats-1))) {
+            if (virJSONValueObjectHasKey(data, "total_mem") && (got < nr_stats)) {
                 if (virJSONValueObjectGetNumberUlong(data, "total_mem", &mem) < 0) {
                     qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                                     _("info balloon reply was missing balloon total_mem"));
-- 
1.6.6.1




More information about the libvir-list mailing list