All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org, "Eric Farman" <farman@linux.ibm.com>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"David Gibson" <david@gibson.dropbear.id.au>,
	qemu-block@nongnu.org, "Stefan Hajnoczi" <stefanha@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Samuel Thibault" <samuel.thibault@ens-lyon.org>,
	qemu-s390x@nongnu.org,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Leonardo Bras" <leobras@redhat.com>,
	"Corey Minyard" <cminyard@mvista.com>,
	"Ilya Leoshkevich" <iii@linux.ibm.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	qemu-ppc@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Cédric Le Goater" <clg@kaod.org>,
	"Li Zhijian" <lizhijian@fujitsu.com>,
	"Eric Blake" <eblake@redhat.com>,
	"Denis V. Lunev" <den@openvz.org>,
	"Hanna Reitz" <hreitz@redhat.com>,
	"Fabiano Rosas" <farosas@suse.de>,
	"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
	qemu-arm@nongnu.org,
	"Daniel Henrique Barboza" <danielhb413@gmail.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Corey Minyard" <minyard@acm.org>, "John Snow" <jsnow@redhat.com>,
	"Jeff Cody" <codyprime@gmail.com>, "Peter Xu" <peterx@redhat.com>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Harsh Prateek Bora" <harshpb@linux.ibm.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Stefan Weil" <sw@weilnetz.de>,
	"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
	"Fam Zheng" <fam@euphon.net>, "Het Gala" <het.gala@nutanix.com>,
	"Aravind Retnakaran" <aravind.retnakaran@nutanix.com>
Subject: Re: [PULL 38/40] migration: Implement MigrateChannelList to qmp migration flow.
Date: Mon, 06 Nov 2023 15:27:05 +0100	[thread overview]
Message-ID: <87y1fbyn2e.fsf@secure.mitica> (raw)
In-Reply-To: <CAFEAcA90R-Yg-LrMmbotCQDMPGPrOi6dN1ZyC0ufBziPREzyyA@mail.gmail.com> (Peter Maydell's message of "Mon, 6 Nov 2023 13:57:19 +0000")

Peter Maydell <peter.maydell@linaro.org> wrote:
> On Thu, 2 Nov 2023 at 11:46, Juan Quintela <quintela@redhat.com> wrote:
>>
>> From: Het Gala <het.gala@nutanix.com>
>>
>> Integrate MigrateChannelList with all transport backends
>> (socket, exec and rdma) for both src and dest migration
>> endpoints for qmp migration.
>>
>> For current series, limit the size of MigrateChannelList
>> to single element (single interface) as runtime check.
>>
>> Suggested-by: Aravind Retnakaran <aravind.retnakaran@nutanix.com>
>> Signed-off-by: Het Gala <het.gala@nutanix.com>
>> Signed-off-by: Fabiano Rosas <farosas@suse.de>
>> Reviewed-by: Juan Quintela <quintela@redhat.com>
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>> Message-ID: <20231023182053.8711-13-farosas@suse.de>
>
> Hi; after this migration pull there seem to be a lot of
> new Coverity issues in migration code. Could somebody
> take a look at them, please?


Hi

I received this, looking into it.

Later, Juan.

>
> Here's one in particular (CID 1523826, 1523828):
>
>> @@ -1927,35 +1933,38 @@ void qmp_migrate(const char *uri, bool has_channels,
>>      bool resume_requested;
>>      Error *local_err = NULL;
>>      MigrationState *s = migrate_get_current();
>> -    g_autoptr(MigrationAddress) channel = NULL;
>> +    MigrationChannel *channel = NULL;
>> +    MigrationAddress *addr = NULL;
>
> 'channel' in this function used to be auto-freed, but now it is not...
>
>>
>>      /*
>>       * Having preliminary checks for uri and channel
>>       */
>> -    if (has_channels) {
>> -        error_setg(errp, "'channels' argument should not be set yet.");
>> -        return;
>> -    }
>> -
>>      if (uri && has_channels) {
>>          error_setg(errp, "'uri' and 'channels' arguments are mutually "
>>                     "exclusive; exactly one of the two should be present in "
>>                     "'migrate' qmp command ");
>>          return;
>> -    }
>> -
>> -    if (!uri && !has_channels) {
>> +    } else if (channels) {
>> +        /* To verify that Migrate channel list has only item */
>> +        if (channels->next) {
>> +            error_setg(errp, "Channel list has more than one entries");
>> +            return;
>> +        }
>> +        channel = channels->value;
>> +    } else if (uri) {
>> +        /* caller uses the old URI syntax */
>> +        if (!migrate_uri_parse(uri, &channel, errp)) {
>> +            return;
>> +        }
>
> ...and here migrate_uri_parse() allocates memory which is
> returned into 'channel'...
>
>> +    } else {
>>          error_setg(errp, "neither 'uri' or 'channels' argument are "
>>                     "specified in 'migrate' qmp command ");
>>          return;
>>      }
>> -
>> -    if (!migrate_uri_parse(uri, &channel, errp)) {
>> -        return;
>> -    }
>> +    addr = channel->addr;
>>
>>      /* transport mechanism not suitable for migration? */
>> -    if (!migration_channels_and_transport_compatible(channel, errp)) {
>> +    if (!migration_channels_and_transport_compatible(addr, errp)) {
>>          return;
>>      }
>>
>> @@ -1972,8 +1981,8 @@ void qmp_migrate(const char *uri, bool has_channels,
>>          }
>>      }
>>
>> -    if (channel->transport == MIGRATION_ADDRESS_TYPE_SOCKET) {
>> -        SocketAddress *saddr = &channel->u.socket;
>> +    if (addr->transport == MIGRATION_ADDRESS_TYPE_SOCKET) {
>> +        SocketAddress *saddr = &addr->u.socket;
>>          if (saddr->type == SOCKET_ADDRESS_TYPE_INET ||
>>              saddr->type == SOCKET_ADDRESS_TYPE_UNIX ||
>>              saddr->type == SOCKET_ADDRESS_TYPE_VSOCK) {
>> @@ -1982,13 +1991,13 @@ void qmp_migrate(const char *uri, bool has_channels,
>>              fd_start_outgoing_migration(s, saddr->u.fd.str, &local_err);
>>          }
>>  #ifdef CONFIG_RDMA
>> -    } else if (channel->transport == MIGRATION_ADDRESS_TYPE_RDMA) {
>> -        rdma_start_outgoing_migration(s, &channel->u.rdma, &local_err);
>> +    } else if (addr->transport == MIGRATION_ADDRESS_TYPE_RDMA) {
>> +        rdma_start_outgoing_migration(s, &addr->u.rdma, &local_err);
>>  #endif
>> -    } else if (channel->transport == MIGRATION_ADDRESS_TYPE_EXEC) {
>> -        exec_start_outgoing_migration(s, channel->u.exec.args, &local_err);
>> -    } else if (channel->transport == MIGRATION_ADDRESS_TYPE_FILE) {
>> -        file_start_outgoing_migration(s, &channel->u.file, &local_err);
>> +    } else if (addr->transport == MIGRATION_ADDRESS_TYPE_EXEC) {
>> +        exec_start_outgoing_migration(s, addr->u.exec.args, &local_err);
>> +    } else if (addr->transport == MIGRATION_ADDRESS_TYPE_FILE) {
>> +        file_start_outgoing_migration(s, &addr->u.file, &local_err);
>>      } else {
>>          error_setg(&local_err, QERR_INVALID_PARAMETER_VALUE, "uri",
>>                     "a valid migration protocol");
>
> ...which is leaked because we don't add any code for freeing
> channel to compensate for it no longer being autofreed.
>
> thanks
> -- PMM


  reply	other threads:[~2023-11-06 14:27 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-02 11:40 [PULL 00/40] Migration 20231102 patches Juan Quintela
2023-11-02 11:40 ` [PULL 01/40] hw/ipmi: Don't call vmstate_register() from instance_init() functions Juan Quintela
2023-11-02 11:40 ` [PULL 02/40] hw/s390x/s390-skeys: Don't call register_savevm_live() during instance_init() Juan Quintela
2023-11-02 11:40 ` [PULL 03/40] hw/s390x/s390-stattrib: Simplify handling of the "migration-enabled" property Juan Quintela
2023-11-02 11:40 ` [PULL 04/40] hw/s390x/s390-stattrib: Don't call register_savevm_live() during instance_init() Juan Quintela
2023-11-02 11:40 ` [PULL 05/40] migration: Create vmstate_register_any() Juan Quintela
2023-11-02 11:40 ` [PULL 06/40] migration: Use vmstate_register_any() Juan Quintela
2023-11-02 11:40 ` [PULL 07/40] migration: Use vmstate_register_any() for isa-ide Juan Quintela
2023-11-02 11:40 ` [PULL 08/40] migration: Use VMSTATE_INSTANCE_ID_ANY for slirp Juan Quintela
2023-11-02 11:40 ` [PULL 09/40] migration: Hack to maintain backwards compatibility for ppc Juan Quintela
2023-11-02 11:40 ` [PULL 10/40] migration: Check in savevm_state_handler_insert for dups Juan Quintela
2023-11-02 11:40 ` [PULL 11/40] migration: Improve example and documentation of vmstate_register() Juan Quintela
2023-11-02 11:40 ` [PULL 12/40] migration: Use vmstate_register_any() for audio Juan Quintela
2023-11-02 11:40 ` [PULL 13/40] migration: Use vmstate_register_any() for eeprom93xx Juan Quintela
2023-11-02 11:40 ` [PULL 14/40] migration: Use vmstate_register_any() for vmware_vga Juan Quintela
2023-11-02 11:40 ` [PULL 15/40] migration: Set downtime_start even for postcopy Juan Quintela
2023-11-02 11:40 ` [PULL 16/40] migration: Add migration_downtime_start|end() helpers Juan Quintela
2023-11-02 11:40 ` [PULL 17/40] migration: Add per vmstate downtime tracepoints Juan Quintela
2023-11-02 11:40 ` [PULL 18/40] migration: migration_stop_vm() helper Juan Quintela
2023-11-02 11:40 ` [PULL 19/40] migration: Add tracepoints for downtime checkpoints Juan Quintela
2023-11-02 11:40 ` [PULL 20/40] migration: mode parameter Juan Quintela
2023-11-02 11:40 ` [PULL 21/40] migration: per-mode blockers Juan Quintela
2023-11-09 17:10   ` Peter Maydell
2023-11-09 17:24     ` Steven Sistare
2023-11-09 17:27       ` Peter Maydell
2023-11-02 11:40 ` [PULL 22/40] cpr: relax blockdev migration blockers Juan Quintela
2023-11-02 11:40 ` [PULL 23/40] cpr: relax vhost " Juan Quintela
2023-11-02 11:40 ` [PULL 24/40] cpr: reboot mode Juan Quintela
2023-11-02 11:40 ` [PULL 25/40] tests/qtest: migration: add reboot mode test Juan Quintela
2023-11-15 19:32   ` Steven Sistare
2023-11-02 11:40 ` [PULL 26/40] migration: Refactor error handling in source return path Juan Quintela
2023-11-02 11:40 ` [PULL 27/40] migration: Allow network to fail even during recovery Juan Quintela
2023-11-02 11:40 ` [PULL 28/40] tests/migration-test: Add a test for postcopy hangs during RECOVER Juan Quintela
2023-11-02 11:40 ` [PULL 29/40] migration: Change ram_dirty_bitmap_reload() retval to bool Juan Quintela
2023-11-02 11:40 ` [PULL 30/40] migration: New QAPI type 'MigrateAddress' Juan Quintela
2023-11-02 11:40 ` [PULL 31/40] migration: convert migration 'uri' into 'MigrateAddress' Juan Quintela
2023-11-02 11:40 ` [PULL 32/40] migration: convert socket backend to accept MigrateAddress Juan Quintela
2023-11-02 11:40 ` [PULL 33/40] migration: convert rdma " Juan Quintela
2023-11-02 11:40 ` [PULL 34/40] migration: convert exec " Juan Quintela
2023-11-02 11:40 ` [PULL 35/40] migration: Convert the file backend to the new QAPI syntax Juan Quintela
2023-11-02 11:40 ` [PULL 36/40] migration: New migrate and migrate-incoming argument 'channels' Juan Quintela
2023-11-02 11:40 ` [PULL 37/40] migration: modify migration_channels_and_uri_compatible() for new QAPI syntax Juan Quintela
2023-11-02 11:40 ` [PULL 38/40] migration: Implement MigrateChannelList to qmp migration flow Juan Quintela
2023-11-06 13:57   ` Peter Maydell
2023-11-06 14:27     ` Juan Quintela [this message]
2023-11-02 11:40 ` [PULL 39/40] migration: Implement MigrateChannelList to hmp " Juan Quintela
2023-11-02 11:40 ` [PULL 40/40] migration: modify test_multifd_tcp_none() to use new QAPI syntax Juan Quintela
2023-11-03  3:23 ` [PULL 00/40] Migration 20231102 patches Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y1fbyn2e.fsf@secure.mitica \
    --to=quintela@redhat.com \
    --cc=aravind.retnakaran@nutanix.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=clg@kaod.org \
    --cc=cminyard@mvista.com \
    --cc=codyprime@gmail.com \
    --cc=danielhb413@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=david@redhat.com \
    --cc=den@openvz.org \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=fam@euphon.net \
    --cc=farman@linux.ibm.com \
    --cc=farosas@suse.de \
    --cc=harshpb@linux.ibm.com \
    --cc=het.gala@nutanix.com \
    --cc=hreitz@redhat.com \
    --cc=iii@linux.ibm.com \
    --cc=jasowang@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=leobras@redhat.com \
    --cc=lizhijian@fujitsu.com \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --cc=minyard@acm.org \
    --cc=mst@redhat.com \
    --cc=npiggin@gmail.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=peterx@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=samuel.thibault@ens-lyon.org \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=stefanha@redhat.com \
    --cc=sw@weilnetz.de \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.