From nobody Tue Feb 10 11:17:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1614708199; cv=none; d=zohomail.com; s=zohoarc; b=JvWpQ8MG+bAUakwbIJDWfWOLff+7RTjdTJUxjgIWQYznYhUo1xAluRe5cJ/+jq9Y8d6mx9zgGq5zBIK4oWzYBKnq1KNCJRgXyeDR57GjkzpjiBC4ii0YtX8/diRRw2N9iys3DBkNI0Scr0gc8VK+0ueXjAse9iPF767lhnD9/7I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1614708199; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4dP4btjH/JUluQZrX9OiL/COvOORU8agWRC4rEjZ/cw=; b=CtDlu6WvA0e+JdPb+nP6sum1EMG5TgnjdkB+sWmuqfaDtJGLtP7wTN0IqByvCSoRWGpTbUyrEjUvbB6VKT9txgcNSeu2yi5/gf4ifMbkkizWJQTNXNlse2Ob1l1BXKsHTpA9K29cxs0ub/kyYCPamK/OH42cT11IikV1nly2xnY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1614708199200995.8139447731351; Tue, 2 Mar 2021 10:03:19 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.92539.174487 (Exim 4.92) (envelope-from ) id 1lH9MC-0001DV-23; Tue, 02 Mar 2021 18:02:52 +0000 Received: by outflank-mailman (output) from mailman id 92539.174487; Tue, 02 Mar 2021 18:02:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lH9MB-0001DG-Uy; Tue, 02 Mar 2021 18:02:51 +0000 Received: by outflank-mailman (input) for mailman id 92539; Tue, 02 Mar 2021 18:02:50 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1lH9MA-0001A7-5K for xen-devel@lists.xenproject.org; Tue, 02 Mar 2021 18:02:50 +0000 Received: from forwardcorp1p.mail.yandex.net (unknown [2a02:6b8:0:1472:2741:0:8b6:217]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 032fef6a-14cd-4f81-af75-f04b76daadb5; Tue, 02 Mar 2021 18:02:48 +0000 (UTC) Received: from myt5-23f0be3aa648.qloud-c.yandex.net (myt5-23f0be3aa648.qloud-c.yandex.net [IPv6:2a02:6b8:c12:3e29:0:640:23f0:be3a]) by forwardcorp1p.mail.yandex.net (Yandex) with ESMTP id 23B5C2E14F1; Tue, 2 Mar 2021 21:02:47 +0300 (MSK) Received: from myt5-70c90f7d6d7d.qloud-c.yandex.net (myt5-70c90f7d6d7d.qloud-c.yandex.net [2a02:6b8:c12:3e2c:0:640:70c9:f7d]) by myt5-23f0be3aa648.qloud-c.yandex.net (mxbackcorp/Yandex) with ESMTP id itqAQmwSu5-2jxqXt4S; Tue, 02 Mar 2021 21:02:47 +0300 Received: from dynamic-vpn.dhcp.yndx.net (dynamic-vpn.dhcp.yndx.net [2a02:6b8:b080:8002::1:1a]) by myt5-70c90f7d6d7d.qloud-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id onVeXhLyoo-2io0bRhB; Tue, 02 Mar 2021 21:02:45 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Inumbo-ID: 032fef6a-14cd-4f81-af75-f04b76daadb5 Precedence: bulk DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1614708167; bh=4dP4btjH/JUluQZrX9OiL/COvOORU8agWRC4rEjZ/cw=; h=In-Reply-To:Message-Id:References:Date:Subject:To:From:Cc; b=g4K6OptbJ9pfErgzapKX07gXk0MxSoJLFK8KxtTqMf8/YjaBa1ezWVYCMUzJ916ea TTWTEf/erLYHxnRieJigvi8MRr1v35kKFHxQlFsGwpI6BqYDO0wRmtU/asT7prATh7 aeIrQWCSrAHtSsdzgRq/aMB1l7NSH4jZobn9XFOc= Authentication-Results: myt5-23f0be3aa648.qloud-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Alexey Kirillov To: Jason Wang , Markus Armbruster , Thomas Huth , Eric Blake Cc: Laurent Vivier , Samuel Thibault , "Michael S. Tsirkin" , Michael Roth , Paolo Bonzini , Luigi Rizzo , Giuseppe Lettieri , Vincenzo Maffione , Stefan Weil , Stefano Stabellini , Anthony Perard , Paul Durrant , xen-devel@lists.xenproject.org, qemu-devel@nongnu.org, yc-core@yandex-team.ru Subject: [PATCH v6 3/5] net: Move NetClientState.info_str to dynamic allocations Date: Tue, 2 Mar 2021 21:02:03 +0300 Message-Id: <20210302180205.5009-4-lekiravi@yandex-team.ru> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210302180205.5009-1-lekiravi@yandex-team.ru> References: <20210302180205.5009-1-lekiravi@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @yandex-team.ru) Content-Type: text/plain; charset="utf-8" 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 --- hw/net/xen_nic.c | 5 ++--- include/net/net.h | 2 +- net/l2tpv3.c | 3 +-- net/net.c | 14 ++++++++------ net/slirp.c | 5 ++--- net/socket.c | 43 ++++++++++++++++++++++++------------------- net/tap-win32.c | 3 +-- net/tap.c | 13 +++++-------- net/vde.c | 3 +-- net/vhost-user.c | 3 +-- net/vhost-vdpa.c | 2 +- 11 files changed, 47 insertions(+), 49 deletions(-) diff --git a/hw/net/xen_nic.c b/hw/net/xen_nic.c index 5c815b4f0c..8431808ea0 100644 --- a/hw/net/xen_nic.c +++ b/hw/net/xen_nic.c @@ -296,9 +296,8 @@ static int net_init(struct XenLegacyDevice *xendev) netdev->nic =3D qemu_new_nic(&net_xen_info, &netdev->conf, "xen", NULL, netdev); =20 - snprintf(qemu_get_queue(netdev->nic)->info_str, - sizeof(qemu_get_queue(netdev->nic)->info_str), - "nic: xenbus vif macaddr=3D%s", netdev->mac); + qemu_get_queue(netdev->nic)->info_str =3D g_strdup_printf( + "nic: xenbus vif macaddr=3D%s", netdev->mac); =20 /* fill info */ xenstore_write_be_int(&netdev->xendev, "feature-rx-copy", 1); diff --git a/include/net/net.h b/include/net/net.h index 162fd3f1b5..7039eb280a 100644 --- a/include/net/net.h +++ b/include/net/net.h @@ -94,7 +94,7 @@ struct NetClientState { NetQueue *incoming_queue; char *model; char *name; - char info_str[256]; + char *info_str; NetdevInfo *stored_config; unsigned receive_disabled : 1; NetClientDestructor *destructor; diff --git a/net/l2tpv3.c b/net/l2tpv3.c index 8aa0a3e1a0..96611cb4af 100644 --- a/net/l2tpv3.c +++ b/net/l2tpv3.c @@ -730,8 +730,7 @@ int net_init_l2tpv3(const Netdev *netdev, QAPI_CLONE_MEMBERS(NetdevL2TPv3Options, &nc->stored_config->u.l2tpv3, l2tpv3); =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), - "l2tpv3: connected"); + s->nc.info_str =3D g_strdup_printf("l2tpv3: connected"); return 0; outerr: qemu_del_net_client(nc); diff --git a/net/net.c b/net/net.c index 9b213f72d2..cc83918d80 100644 --- a/net/net.c +++ b/net/net.c @@ -128,11 +128,12 @@ char *qemu_mac_strdup_printf(const uint8_t *macaddr) =20 void qemu_format_nic_info_str(NetClientState *nc, uint8_t macaddr[6]) { - snprintf(nc->info_str, sizeof(nc->info_str), - "model=3D%s,macaddr=3D%02x:%02x:%02x:%02x:%02x:%02x", - nc->model, - macaddr[0], macaddr[1], macaddr[2], - macaddr[3], macaddr[4], macaddr[5]); + g_free(nc->info_str); + nc->info_str =3D g_strdup_printf( + "model=3D%s,macaddr=3D%02x:%02x:%02x:%02x:%02x:%02x", + nc->model, + macaddr[0], macaddr[1], macaddr[2], + macaddr[3], macaddr[4], macaddr[5]); } =20 static int mac_table[256] =3D {0}; @@ -351,6 +352,7 @@ static void qemu_free_net_client(NetClientState *nc) } g_free(nc->name); g_free(nc->model); + g_free(nc->info_str); qapi_free_NetdevInfo(nc->stored_config); if (nc->destructor) { nc->destructor(nc); @@ -1197,7 +1199,7 @@ void print_net_client(Monitor *mon, NetClientState *n= c) monitor_printf(mon, "%s: index=3D%d,type=3D%s,%s\n", nc->name, nc->queue_index, NetClientDriver_str(nc->info->type), - nc->info_str); + nc->info_str ? nc->info_str : ""); if (!QTAILQ_EMPTY(&nc->filters)) { monitor_printf(mon, "filters:\n"); } diff --git a/net/slirp.c b/net/slirp.c index 5f126d7cf5..f8b3636fcc 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -669,9 +669,8 @@ static int net_slirp_init(NetClientState *peer, const c= har *model, stored->tftp_server_name =3D g_strdup(tftp_server_name); } =20 - snprintf(nc->info_str, sizeof(nc->info_str), - "net=3D%s,restrict=3D%s", inet_ntoa(net), - restricted ? "on" : "off"); + nc->info_str =3D g_strdup_printf("net=3D%s,restrict=3D%s", inet_ntoa(n= et), + restricted ? "on" : "off"); =20 s =3D DO_UPCAST(SlirpState, nc, nc); =20 diff --git a/net/socket.c b/net/socket.c index 1614523b82..98172347d7 100644 --- a/net/socket.c +++ b/net/socket.c @@ -180,7 +180,8 @@ static void net_socket_send(void *opaque) s->fd =3D -1; net_socket_rs_init(&s->rs, net_socket_rs_finalize, false); s->nc.link_down =3D true; - memset(s->nc.info_str, 0, sizeof(s->nc.info_str)); + g_free(s->nc.info_str); + s->nc.info_str =3D g_new0(char, 1); =20 return; } @@ -400,16 +401,16 @@ static NetSocketState *net_socket_fd_init_dgram(NetCl= ientState *peer, stored->mcast =3D g_strdup(mcast); =20 s->dgram_dst =3D saddr; - snprintf(nc->info_str, sizeof(nc->info_str), - "socket: fd=3D%d (cloned mcast=3D%s:%d)", - fd, inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port)); + nc->info_str =3D g_strdup_printf("socket: fd=3D%d (cloned mcast=3D= %s:%d)", + fd, inet_ntoa(saddr.sin_addr), + ntohs(saddr.sin_port)); } else { if (sa_type =3D=3D SOCKET_ADDRESS_TYPE_UNIX) { s->dgram_dst.sin_family =3D AF_UNIX; } =20 - snprintf(nc->info_str, sizeof(nc->info_str), - "socket: fd=3D%d %s", fd, SocketAddressType_str(sa_type)); + nc->info_str =3D g_strdup_printf("socket: fd=3D%d %s", + fd, SocketAddressType_str(sa_type)); } =20 return s; @@ -444,7 +445,7 @@ static NetSocketState *net_socket_fd_init_stream(NetCli= entState *peer, =20 nc =3D qemu_new_net_client(&net_socket_info, peer, model, name); =20 - snprintf(nc->info_str, sizeof(nc->info_str), "socket: fd=3D%d", fd); + nc->info_str =3D g_strdup_printf("socket: fd=3D%d", fd); =20 s =3D DO_UPCAST(NetSocketState, nc, nc); =20 @@ -528,9 +529,10 @@ static void net_socket_accept(void *opaque) stored->has_fd =3D true; stored->fd =3D g_strdup_printf("%d", fd); =20 - 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 =3D g_strdup_printf("socket: connection from %s:%d", + inet_ntoa(saddr.sin_addr), + ntohs(saddr.sin_port)); } =20 static int net_socket_listen_init(NetClientState *peer, @@ -645,9 +647,10 @@ static int net_socket_connect_init(NetClientState *pee= r, stored->has_connect =3D true; stored->connect =3D g_strdup(host_str); =20 - 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 =3D g_strdup_printf("socket: connect to %s:%d", + inet_ntoa(saddr.sin_addr), + ntohs(saddr.sin_port)); return 0; } =20 @@ -704,9 +707,10 @@ static int net_socket_mcast_init(NetClientState *peer, stored->localaddr =3D g_strdup(localaddr_str); } =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), - "socket: mcast=3D%s:%d", - inet_ntoa(saddr.sin_addr), ntohs(saddr.sin_port)); + g_free(s->nc.info_str); + s->nc.info_str =3D g_strdup_printf("socket: mcast=3D%s:%d", + inet_ntoa(saddr.sin_addr), + ntohs(saddr.sin_port)); return 0; =20 } @@ -769,9 +773,10 @@ static int net_socket_udp_init(NetClientState *peer, stored->has_udp =3D true; stored->udp =3D g_strdup(rhost); =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), - "socket: udp=3D%s:%d", - inet_ntoa(raddr.sin_addr), ntohs(raddr.sin_port)); + g_free(s->nc.info_str); + s->nc.info_str =3D g_strdup_printf("socket: udp=3D%s:%d", + inet_ntoa(raddr.sin_addr), + ntohs(raddr.sin_port)); return 0; } =20 diff --git a/net/tap-win32.c b/net/tap-win32.c index b60933bd1a..0888db8cce 100644 --- a/net/tap-win32.c +++ b/net/tap-win32.c @@ -787,8 +787,7 @@ static int tap_win32_init(NetClientState *peer, const c= har *model, stored->has_ifname =3D true; stored->ifname =3D g_strdup(ifname); =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), - "tap: ifname=3D%s", ifname); + s->nc.info_str =3D g_strdup_printf("tap: ifname=3D%s", ifname); =20 s->handle =3D handle; =20 diff --git a/net/tap.c b/net/tap.c index 8041245ba7..f864f434b2 100644 --- a/net/tap.c +++ b/net/tap.c @@ -625,8 +625,7 @@ int net_init_bridge(const Netdev *netdev, const char *n= ame, stored->helper =3D g_strdup(helper); } =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=3D%s,br=3D%s"= , helper, - br); + s->nc.info_str =3D g_strdup_printf("helper=3D%s,br=3D%s", helper, br); =20 return 0; } @@ -714,7 +713,7 @@ static void net_init_tap_one(const NetdevTapOptions *ta= p, NetClientState *peer, g_free(tmp_s); } =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), "fd=3D%d", fd); + s->nc.info_str =3D g_strdup_printf("fd=3D%d", fd); } else if (tap->has_helper) { if (!stored->has_helper) { stored->has_helper =3D true; @@ -727,8 +726,7 @@ static void net_init_tap_one(const NetdevTapOptions *ta= p, NetClientState *peer, g_strdup(DEFAULT_BRIDGE_INTERFACE); } =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), "helper=3D%s", - tap->helper); + s->nc.info_str =3D g_strdup_printf("helper=3D%s", tap->helper); } else { if (ifname && !stored->has_ifname) { stored->has_ifname =3D true; @@ -745,9 +743,8 @@ static void net_init_tap_one(const NetdevTapOptions *ta= p, NetClientState *peer, stored->downscript =3D g_strdup(downscript); } =20 - snprintf(s->nc.info_str, sizeof(s->nc.info_str), - "ifname=3D%s,script=3D%s,downscript=3D%s", ifname, script, - downscript); + s->nc.info_str =3D g_strdup_printf("ifname=3D%s,script=3D%s,downsc= ript=3D%s", + ifname, script, downscript); =20 if (strcmp(downscript, "no") !=3D 0) { snprintf(s->down_script, sizeof(s->down_script), "%s", downscr= ipt); diff --git a/net/vde.c b/net/vde.c index b0b8800571..67de6eb0c5 100644 --- a/net/vde.c +++ b/net/vde.c @@ -100,8 +100,7 @@ static int net_vde_init(NetClientState *peer, const cha= r *model, =20 nc =3D qemu_new_net_client(&net_vde_info, peer, model, name); =20 - snprintf(nc->info_str, sizeof(nc->info_str), "sock=3D%s,fd=3D%d", - sock, vde_datafd(vde)); + nc->info_str =3D g_strdup_printf("sock=3D%s,fd=3D%d", sock, vde_datafd= (vde)); =20 s =3D DO_UPCAST(VDEState, nc, nc); =20 diff --git a/net/vhost-user.c b/net/vhost-user.c index 5b7056be25..49c9a740c2 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -327,8 +327,7 @@ static int net_vhost_user_init(NetClientState *peer, co= nst char *device, user =3D g_new0(struct VhostUserState, 1); for (i =3D 0; i < queues; i++) { nc =3D qemu_new_net_client(&net_vhost_user_info, peer, device, nam= e); - snprintf(nc->info_str, sizeof(nc->info_str), "vhost-user%d to %s", - i, chr->label); + nc->info_str =3D g_strdup_printf("vhost-user%d to %s", i, chr->lab= el); nc->queue_index =3D i; if (!nc0) { nc0 =3D nc; diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c index 8c27ea0142..423d71770d 100644 --- a/net/vhost-vdpa.c +++ b/net/vhost-vdpa.c @@ -200,7 +200,7 @@ static int net_vhost_vdpa_init(NetClientState *peer, co= nst char *device, stored->has_queues =3D true; stored->queues =3D 1; /* TODO: change when support multiqueue */ =20 - snprintf(nc->info_str, sizeof(nc->info_str), TYPE_VHOST_VDPA); + nc->info_str =3D g_strdup_printf(TYPE_VHOST_VDPA); nc->queue_index =3D 0; s =3D DO_UPCAST(VhostVDPAState, nc, nc); vdpa_device_fd =3D qemu_open_old(vhostdev, O_RDWR); --=20 2.25.1