net: Move NetClientState.info_str to dynamic allocations

The info_str field of the NetClientState structure is static and has a size
of 256 bytes. This amount is often unclaimed, and the field itself is used
exclusively for HMP "info network".

The patch translates info_str to dynamic memory allocation.

This action is also allows us to painlessly discard usage of this field
for backend devices.

Signed-off-by: Alexey Kirillov <lekiravi@yandex-team.ru>
Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
Alexey Kirillov 2021-03-03 12:59:08 +03:00 committed by Jason Wang
parent 3c3b656885
commit 59b5437eb7
11 changed files with 47 additions and 49 deletions

View file

@ -180,7 +180,8 @@ static void net_socket_send(void *opaque)
s->fd = -1;
net_socket_rs_init(&s->rs, net_socket_rs_finalize, false);
s->nc.link_down = true;
memset(s->nc.info_str, 0, sizeof(s->nc.info_str));
g_free(s->nc.info_str);
s->nc.info_str = g_new0(char, 1);
return;
}
@ -400,16 +401,16 @@ static NetSocketState *net_socket_fd_init_dgram(NetClientState *peer,
stored->mcast = g_strdup(mcast);
s->dgram_dst = saddr;
snprintf(nc->info_str, sizeof(nc->info_str),
"socket: fd=%d (cloned mcast=%s:%d)",
fd, inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
nc->info_str = g_strdup_printf("socket: fd=%d (cloned mcast=%s:%d)",
fd, inet_ntoa(saddr.sin_addr),
ntohs(saddr.sin_port));
} else {
if (sa_type == SOCKET_ADDRESS_TYPE_UNIX) {
s->dgram_dst.sin_family = AF_UNIX;
}
snprintf(nc->info_str, sizeof(nc->info_str),
"socket: fd=%d %s", fd, SocketAddressType_str(sa_type));
nc->info_str = g_strdup_printf("socket: fd=%d %s",
fd, SocketAddressType_str(sa_type));
}
return s;
@ -444,7 +445,7 @@ static NetSocketState *net_socket_fd_init_stream(NetClientState *peer,
nc = qemu_new_net_client(&net_socket_info, peer, model, name);
snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=%d", fd);
nc->info_str = g_strdup_printf("socket: fd=%d", fd);
s = DO_UPCAST(NetSocketState, nc, nc);
@ -528,9 +529,10 @@ static void net_socket_accept(void *opaque)
stored->has_fd = true;
stored->fd = g_strdup_printf("%d", fd);
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
"socket: connection from %s:%d",
inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
g_free(s->nc.info_str);
s->nc.info_str = g_strdup_printf("socket: connection from %s:%d",
inet_ntoa(saddr.sin_addr),
ntohs(saddr.sin_port));
}
static int net_socket_listen_init(NetClientState *peer,
@ -645,9 +647,10 @@ static int net_socket_connect_init(NetClientState *peer,
stored->has_connect = true;
stored->connect = g_strdup(host_str);
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
"socket: connect to %s:%d",
inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
g_free(s->nc.info_str);
s->nc.info_str = g_strdup_printf("socket: connect to %s:%d",
inet_ntoa(saddr.sin_addr),
ntohs(saddr.sin_port));
return 0;
}
@ -704,9 +707,10 @@ static int net_socket_mcast_init(NetClientState *peer,
stored->localaddr = g_strdup(localaddr_str);
}
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
"socket: mcast=%s:%d",
inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port));
g_free(s->nc.info_str);
s->nc.info_str = g_strdup_printf("socket: mcast=%s:%d",
inet_ntoa(saddr.sin_addr),
ntohs(saddr.sin_port));
return 0;
}
@ -769,9 +773,10 @@ static int net_socket_udp_init(NetClientState *peer,
stored->has_udp = true;
stored->udp = g_strdup(rhost);
snprintf(s->nc.info_str, sizeof(s->nc.info_str),
"socket: udp=%s:%d",
inet_ntoa(raddr.sin_addr), ntohs(raddr.sin_port));
g_free(s->nc.info_str);
s->nc.info_str = g_strdup_printf("socket: udp=%s:%d",
inet_ntoa(raddr.sin_addr),
ntohs(raddr.sin_port));
return 0;
}