:p
atchew
Login
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. v1: introducing a separate enum for optional capabilities v2: another approach: fix only the incorrect condition Found by Linux Verification Center (linuxtesting.org) with SVACE. Signed-off-by: Dmitry Frolov <frolov@swemel.ru> --- src/qemu/qemu_migration_params.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_params.c index XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -XXX,XX +XXX,XX @@ qemuMigrationParamsSetBlockDirtyBitmapMapping(qemuMigrationParams *migParams, ignore_value(virBitmapClearBit(migParams->caps, QEMU_MIGRATION_CAP_BLOCK_DIRTY_BITMAPS)); } +static bool +qemuMigrationCapabilityIsOptional(qemuMigrationCapability cap) +{ + return cap == QEMU_MIGRATION_CAP_POSTCOPY_PREEMPT || + cap == QEMU_MIGRATION_CAP_SWITCHOVER_ACK; +} qemuMigrationParams * qemuMigrationParamsFromFlags(virTypedParameterPtr params, @@ -XXX,XX +XXX,XX @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, qemuMigrationCapabilityTypeToString(item->cap)); ignore_value(virBitmapSetBit(migParams->caps, item->cap)); - if (item->optional) { + if (qemuMigrationCapabilityIsOptional(item->optional)) { qemuMigrationCapability opt = item->optional; ignore_value(virBitmapSetBit(migParams->optional, opt)); if (item->party != party) -- 2.34.1
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 <frolov@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 XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -XXX,XX +XXX,XX @@ 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 XXXXXXX..XXXXXXX 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -XXX,XX +XXX,XX @@ #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