migration: free 'saddr' since be no longer used
Since socket_parse() will allocate memory for 'saddr',and its value will pass to 'addr' that allocated by migrate_uri_parse(), then 'saddr' will no longer used,need to free. But due to 'saddr->u' is shallow copying the contents of the union, the members of this union containing allocated strings,and will be used after that. So just free 'saddr' itself without doing a deep free on the contents of the SocketAddress. Fixes: 72a8192e225c ("migration: convert migration 'uri' into 'MigrateAddress'") Signed-off-by: Zongmin Zhou<zhouzongmin@kylinos.cn> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231120031428.908295-1-zhouzongmin@kylinos.cn>
This commit is contained in:
parent
0a08c7947b
commit
41581265aa
@ -462,7 +462,6 @@ bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
|
|||||||
{
|
{
|
||||||
g_autoptr(MigrationChannel) val = g_new0(MigrationChannel, 1);
|
g_autoptr(MigrationChannel) val = g_new0(MigrationChannel, 1);
|
||||||
g_autoptr(MigrationAddress) addr = g_new0(MigrationAddress, 1);
|
g_autoptr(MigrationAddress) addr = g_new0(MigrationAddress, 1);
|
||||||
SocketAddress *saddr = NULL;
|
|
||||||
InetSocketAddress *isock = &addr->u.rdma;
|
InetSocketAddress *isock = &addr->u.rdma;
|
||||||
strList **tail = &addr->u.exec.args;
|
strList **tail = &addr->u.exec.args;
|
||||||
|
|
||||||
@ -487,12 +486,14 @@ bool migrate_uri_parse(const char *uri, MigrationChannel **channel,
|
|||||||
strstart(uri, "vsock:", NULL) ||
|
strstart(uri, "vsock:", NULL) ||
|
||||||
strstart(uri, "fd:", NULL)) {
|
strstart(uri, "fd:", NULL)) {
|
||||||
addr->transport = MIGRATION_ADDRESS_TYPE_SOCKET;
|
addr->transport = MIGRATION_ADDRESS_TYPE_SOCKET;
|
||||||
saddr = socket_parse(uri, errp);
|
SocketAddress *saddr = socket_parse(uri, errp);
|
||||||
if (!saddr) {
|
if (!saddr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
addr->u.socket.type = saddr->type;
|
addr->u.socket.type = saddr->type;
|
||||||
addr->u.socket.u = saddr->u;
|
addr->u.socket.u = saddr->u;
|
||||||
|
/* Don't free the objects inside; their ownership moved to "addr" */
|
||||||
|
g_free(saddr);
|
||||||
} else if (strstart(uri, "file:", NULL)) {
|
} else if (strstart(uri, "file:", NULL)) {
|
||||||
addr->transport = MIGRATION_ADDRESS_TYPE_FILE;
|
addr->transport = MIGRATION_ADDRESS_TYPE_FILE;
|
||||||
addr->u.file.filename = g_strdup(uri + strlen("file:"));
|
addr->u.file.filename = g_strdup(uri + strlen("file:"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user