On Wed, Feb 05, 2025 at 12:54:01PM -0800, Steve Sistare wrote:
> qmp_migrate guarantees that cpr_channel is not null for
> MIG_MODE_CPR_TRANSFER when cpr_state_save is called:
> 
>     qmp_migrate()
>         if (s->parameters.mode == MIG_MODE_CPR_TRANSFER && !cpr_channel) {
>             return;
>         }
>         cpr_state_save(cpr_channel)
> 
> but cpr_state_save checks for mode differently before using channel,
> and Coverity cannot infer that they are equivalent in outgoing QEMU,
> and warns that channel may be NULL:
> 
>     cpr_state_save(channel)
>         MigMode mode = migrate_mode();
>         if (mode == MIG_MODE_CPR_TRANSFER) {
>             f = cpr_transfer_output(channel, errp);
> 
> To make Coverity happy, use parameters.mode in cpr_state_save.
> 
> Resolves: Coverity CID 1590980
> Reported-by: Peter Maydell <peter.mayd...@linaro.org>
> Signed-off-by: Steve Sistare <steven.sist...@oracle.com>
> ---
>  migration/cpr.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/cpr.c b/migration/cpr.c
> index 584b0b9..7f20bd5 100644
> --- a/migration/cpr.c
> +++ b/migration/cpr.c
> @@ -8,6 +8,7 @@
>  #include "qemu/osdep.h"
>  #include "qapi/error.h"
>  #include "migration/cpr.h"
> +#include "migration/migration.h"
>  #include "migration/misc.h"
>  #include "migration/options.h"
>  #include "migration/qemu-file.h"
> @@ -132,7 +133,7 @@ int cpr_state_save(MigrationChannel *channel, Error 
> **errp)
>  {
>      int ret;
>      QEMUFile *f;
> -    MigMode mode = migrate_mode();
> +    MigMode mode = migrate_get_current()->parameters.mode;

Are we sure this can make coverity happy?

Another more straightforward change is caching migrate mode in
qmp_migrate() and also check that before invoking cpr_state_save().

Thanks,

>  
>      trace_cpr_state_save(MigMode_str(mode));
>  
> -- 
> 1.8.3.1
> 

-- 
Peter Xu


Reply via email to