Enum variable of type qemuMigrationCapability is checked for zero in
src/qemu/qemu_migration_params.c:729.

"if (item->optional) { ..."

Actualy, QEMU_MIGRATION_CAP_XBZRLE enum constant has value 0.
So, at least, the condition is incorrect.

Adding QEMU_MIGRATION_CAP_NONE == 0 to enum has several advantages:
- less invasive
- allows comparing with 0
- this approach is wide used in libvirt
- no need to document anything
and only one disadvantage:
- 0-th bit will be reserved (won`t be used) in the corresponding bitmaps.

v1: introducing a separate enum for optional capabilities
v2: another approach: fix only the incorrect condition
v3: third way: add 0-th constanat to enum

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Dmitry Frolov <fro...@swemel.ru>
---
 src/qemu/qemu_migration_params.c | 1 +
 src/qemu/qemu_migration_params.h | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c
index c10660d6f2..ad6ab04a4b 100644
--- a/src/qemu/qemu_migration_params.c
+++ b/src/qemu/qemu_migration_params.c
@@ -92,6 +92,7 @@ VIR_ENUM_IMPL(qemuMigrationCompressMethod,
 
 VIR_ENUM_IMPL(qemuMigrationCapability,
               QEMU_MIGRATION_CAP_LAST,
+              "none",
               "xbzrle",
               "auto-converge",
               "rdma-pin-all",
diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_params.h
index 17fc63f527..60e6413b3c 100644
--- a/src/qemu/qemu_migration_params.h
+++ b/src/qemu/qemu_migration_params.h
@@ -28,6 +28,7 @@
 #include "virenum.h"
 
 typedef enum {
+    QEMU_MIGRATION_CAP_NONE,
     QEMU_MIGRATION_CAP_XBZRLE,
     QEMU_MIGRATION_CAP_AUTO_CONVERGE,
     QEMU_MIGRATION_CAP_RDMA_PIN_ALL,
-- 
2.34.1

Reply via email to