migrate_add_blocker() can fail (e.g. if migration is already in progress), in which case it returns a negative value and populates its errp argument with the reason.
The previous code ignored the return value, leaving state inconsistent on failure. Fix this by: - Passing a local Error ** so failure details can be reported. - Checking the return value; on failure, report the error, free the migration_blocker Error object, and return NULL to the caller. Resolves: CID 1645470 Signed-off-by: Trieu Huynh <[email protected]> --- plugins/api-system.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/api-system.c b/plugins/api-system.c index 9a70b9caa6..f0d6cefe74 100644 --- a/plugins/api-system.c +++ b/plugins/api-system.c @@ -105,10 +105,16 @@ static Error *migration_blocker; const void *qemu_plugin_request_time_control(void) { if (!has_control) { + Error *local_err = NULL; has_control = true; error_setg(&migration_blocker, "TCG plugin time control does not support migration"); - migrate_add_blocker(&migration_blocker, NULL); + if (migrate_add_blocker(&migration_blocker, &local_err) < 0) { + error_report_err(local_err); + error_free(migration_blocker); + migration_blocker = NULL; + return NULL; + } return &has_control; } return NULL; -- 2.43.0
