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