Francesco Romani has uploaded a new change for review.

Change subject: migration: validate progress fields from libvirt
......................................................................

migration: validate progress fields from libvirt

migration monitoring and progress report consume
quite some data from libvirt virDomainGetJobStats().
According to the libvirt documentation, all the data we
use are supposed to be unsigned integer, but up until
now we blindly trust this.

This patch adds validation to make sure we don't receive
negative data. Should this happen, we raise ValueError.

Change-Id: I6de262ce30f32e908a65d5d44fe8499f6951aa63
Signed-off-by: Francesco Romani <[email protected]>
---
M vdsm/virt/migration.py
1 file changed, 21 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/78/56378/1

diff --git a/vdsm/virt/migration.py b/vdsm/virt/migration.py
index 30ed6d4..f5dcd1f 100644
--- a/vdsm/virt/migration.py
+++ b/vdsm/virt/migration.py
@@ -660,23 +660,27 @@
 
     @classmethod
     def from_job_stats(cls, stats):
-        return cls(
-            stats['type'],
-            stats[libvirt.VIR_DOMAIN_JOB_TIME_ELAPSED],
-            stats[libvirt.VIR_DOMAIN_JOB_DATA_TOTAL],
-            stats[libvirt.VIR_DOMAIN_JOB_DATA_PROCESSED],
-            stats[libvirt.VIR_DOMAIN_JOB_DATA_REMAINING],
-            stats[libvirt.VIR_DOMAIN_JOB_MEMORY_TOTAL],
-            stats[libvirt.VIR_DOMAIN_JOB_MEMORY_PROCESSED],
-            stats[libvirt.VIR_DOMAIN_JOB_MEMORY_REMAINING],
-            stats[libvirt.VIR_DOMAIN_JOB_MEMORY_BPS],
-            stats[libvirt.VIR_DOMAIN_JOB_MEMORY_CONSTANT],
-            stats[libvirt.VIR_DOMAIN_JOB_COMPRESSION_BYTES],
-            # available since libvirt 1.3
-            stats.get('memory_dirty_rate', -1),
-            # available since libvirt 1.3
-            stats.get('memory_iteration', -1),
-        )
+        fields = [stats['type']]
+        for key in (libvirt.VIR_DOMAIN_JOB_TIME_ELAPSED,
+                    libvirt.VIR_DOMAIN_JOB_DATA_TOTAL,
+                    libvirt.VIR_DOMAIN_JOB_DATA_PROCESSED,
+                    libvirt.VIR_DOMAIN_JOB_DATA_REMAINING,
+                    libvirt.VIR_DOMAIN_JOB_MEMORY_TOTAL,
+                    libvirt.VIR_DOMAIN_JOB_MEMORY_PROCESSED,
+                    libvirt.VIR_DOMAIN_JOB_MEMORY_REMAINING,
+                    libvirt.VIR_DOMAIN_JOB_MEMORY_BPS,
+                    libvirt.VIR_DOMAIN_JOB_MEMORY_CONSTANT,
+                    libvirt.VIR_DOMAIN_JOB_COMPRESSION_BYTES):
+            value = stats[key]
+            if value < 0:
+                raise ValueError('bad value for %r: %r', key, value)
+            fields.append(value)
+
+        # optional fields available since libvirt 1.3
+        for key in ('memory_dirty_rate', 'memory_iteration'):
+            fields.append(stats.get(key, -1))
+
+        return cls(*fields)
 
     @property
     def ongoing(self):


-- 
To view, visit https://gerrit.ovirt.org/56378
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6de262ce30f32e908a65d5d44fe8499f6951aa63
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to