From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202602 header.b=ZpuGNoya; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 46D175A0627 for ; Tue, 24 Mar 2026 00:26:24 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202602; t=1774308380; bh=yUSdqn/lxDB+R81zWaNTsAMG278XTJBvkPFzRw8m8+Y=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ZpuGNoyaT/eCDeKeGrU1HfKuH9iir1llftkdP8amJhw9dqjSez3sHaH5KtgVEkxx+ 1IoV8YVvl0IuqtZS9tPbDjIhEjhmfMKcaW7pIYdY8vsjvTe2Wtajq/aDVcM3gpeE1i iUIlsygRLyoT3Lf/dzijupcykxFhQpgi+X9N3lrqfkkyVh0IGc+1/5+ng6qabF+oaG R34NQWj4PK53g3VktI2L3IZHY7JWZZLTk/P/sNZYJdttBubwSOwDVGYPtAC/lPhk0n 4P9239dDM0tZwLkdMzc1jCJJs8qNYF2gaikfCm2DtC9WS/eJHsxuFTTDzDiYO1oMQ8 Lagzqz2PkLTrw== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4ffq703XbYz4wCJ; Tue, 24 Mar 2026 10:26:20 +1100 (AEDT) Date: Tue, 24 Mar 2026 10:26:15 +1100 From: David Gibson To: Jon Maloy Subject: Re: [PATCH v6 01/13] conf: use a single buffer for print formatting in conf_print() Message-ID: References: <20260322004333.365713-1-jmaloy@redhat.com> <20260322004333.365713-2-jmaloy@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="dpWRWTNxWn83BgjZ" Content-Disposition: inline In-Reply-To: <20260322004333.365713-2-jmaloy@redhat.com> Message-ID-Hash: L44SUKC3NT7C4HKSC3HMVFTIBEKZIKAU X-Message-ID-Hash: L44SUKC3NT7C4HKSC3HMVFTIBEKZIKAU X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: sbrivio@redhat.com, dgibson@redhat.com, passt-dev@passt.top X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --dpWRWTNxWn83BgjZ Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Sat, Mar 21, 2026 at 08:43:21PM -0400, Jon Maloy wrote: > The function conf_print() uses three different buffers as target > for address print formatting. This is unnecessary, as a single > buffer of length INET6_ADDRSTRLEN has sufficient space for all > address types, IPv4, IPv6 and MAC. There is no risk for conflicts, > since all formatting is followed by an immediate info() printout. >=20 > To make our life easier in the following commits, we do this > simplification here. >=20 > Signed-off-by: Jon Maloy > --- > conf.c | 35 ++++++++++++++++++----------------- > 1 file changed, 18 insertions(+), 17 deletions(-) >=20 > diff --git a/conf.c b/conf.c > index dafac46..9bcd9de 100644 > --- a/conf.c > +++ b/conf.c > @@ -1136,11 +1136,12 @@ enum passt_modes conf_mode(int argc, char *argv[]) > */ > static void conf_print(const struct ctx *c) > { > - char buf4[INET_ADDRSTRLEN], buf6[INET6_ADDRSTRLEN]; > - char bufmac[ETH_ADDRSTRLEN], ifn[IFNAMSIZ]; > + char buf[INET6_ADDRSTRLEN]; INANY_ADDRSTRLEN is already defined to be the max of INET_ADDRSTRLEN and INET6_ADDRSTRLEN. > int i; > =20 > if (c->ifi4 > 0 || c->ifi6 > 0) { > + char ifn[IFNAMSIZ]; > + > info("Template interface: %s%s%s%s%s", > c->ifi4 > 0 ? if_indextoname(c->ifi4, ifn) : "", > c->ifi4 > 0 ? " (IPv4)" : "", > @@ -1162,24 +1163,24 @@ static void conf_print(const struct ctx *c) > !IN6_IS_ADDR_UNSPECIFIED(&c->ip6.addr_out)) { > info("Outbound address: %s%s%s", > IN4_IS_ADDR_UNSPECIFIED(&c->ip4.addr_out) ? "" : > - inet_ntop(AF_INET, &c->ip4.addr_out, buf4, sizeof(buf4)), > + inet_ntop(AF_INET, &c->ip4.addr_out, buf, sizeof(buf)), > (!IN4_IS_ADDR_UNSPECIFIED(&c->ip4.addr_out) && > !IN6_IS_ADDR_UNSPECIFIED(&c->ip6.addr_out)) ? ", " : "", > IN6_IS_ADDR_UNSPECIFIED(&c->ip6.addr_out) ? "" : > - inet_ntop(AF_INET6, &c->ip6.addr_out, buf6, sizeof(buf6))); > + inet_ntop(AF_INET6, &c->ip6.addr_out, buf, sizeof(buf))); This one won't work: you're using the same buffer twice for the same print. The buffer will be overwritten by the second inet_ntop() before the results from the first one are printed. > } > =20 > if (c->mode =3D=3D MODE_PASTA && !c->splice_only) > info("Namespace interface: %s", c->pasta_ifn); > =20 > info("MAC:"); > - info(" host: %s", eth_ntop(c->our_tap_mac, bufmac, sizeof(bufmac))); > + info(" host: %s", eth_ntop(c->our_tap_mac, buf, sizeof(buf))); > =20 > if (c->ifi4) { > if (!IN4_IS_ADDR_UNSPECIFIED(&c->ip4.map_host_loopback)) > info(" NAT to host 127.0.0.1: %s", > inet_ntop(AF_INET, &c->ip4.map_host_loopback, > - buf4, sizeof(buf4))); > + buf, sizeof(buf))); > =20 > if (!c->no_dhcp) { > uint32_t mask; > @@ -1188,12 +1189,12 @@ static void conf_print(const struct ctx *c) > =20 > info("DHCP:"); > info(" assign: %s", > - inet_ntop(AF_INET, &c->ip4.addr, buf4, sizeof(buf4))); > + inet_ntop(AF_INET, &c->ip4.addr, buf, sizeof(buf))); > info(" mask: %s", > - inet_ntop(AF_INET, &mask, buf4, sizeof(buf4))); > + inet_ntop(AF_INET, &mask, buf, sizeof(buf))); > info(" router: %s", > inet_ntop(AF_INET, &c->ip4.guest_gw, > - buf4, sizeof(buf4))); > + buf, sizeof(buf))); > } > =20 > for (i =3D 0; i < ARRAY_SIZE(c->ip4.dns); i++) { > @@ -1201,8 +1202,8 @@ static void conf_print(const struct ctx *c) > break; > if (!i) > info("DNS:"); > - inet_ntop(AF_INET, &c->ip4.dns[i], buf4, sizeof(buf4)); > - info(" %s", buf4); > + inet_ntop(AF_INET, &c->ip4.dns[i], buf, sizeof(buf)); > + info(" %s", buf); > } > =20 > for (i =3D 0; *c->dns_search[i].n; i++) { > @@ -1216,7 +1217,7 @@ static void conf_print(const struct ctx *c) > if (!IN6_IS_ADDR_UNSPECIFIED(&c->ip6.map_host_loopback)) > info(" NAT to host ::1: %s", > inet_ntop(AF_INET6, &c->ip6.map_host_loopback, > - buf6, sizeof(buf6))); > + buf, sizeof(buf))); > =20 > if (!c->no_ndp && !c->no_dhcpv6) > info("NDP/DHCPv6:"); > @@ -1228,12 +1229,12 @@ static void conf_print(const struct ctx *c) > goto dns6; > =20 > info(" assign: %s", > - inet_ntop(AF_INET6, &c->ip6.addr, buf6, sizeof(buf6))); > + inet_ntop(AF_INET6, &c->ip6.addr, buf, sizeof(buf))); > info(" router: %s", > - inet_ntop(AF_INET6, &c->ip6.guest_gw, buf6, sizeof(buf6))); > + inet_ntop(AF_INET6, &c->ip6.guest_gw, buf, sizeof(buf))); > info(" our link-local: %s", > inet_ntop(AF_INET6, &c->ip6.our_tap_ll, > - buf6, sizeof(buf6))); > + buf, sizeof(buf))); > =20 > dns6: > for (i =3D 0; i < ARRAY_SIZE(c->ip6.dns); i++) { > @@ -1241,8 +1242,8 @@ dns6: > break; > if (!i) > info("DNS:"); > - inet_ntop(AF_INET6, &c->ip6.dns[i], buf6, sizeof(buf6)); > - info(" %s", buf6); > + inet_ntop(AF_INET6, &c->ip6.dns[i], buf, sizeof(buf)); > + info(" %s", buf); > } > =20 > for (i =3D 0; *c->dns_search[i].n; i++) { > --=20 > 2.52.0 >=20 --=20 David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson --dpWRWTNxWn83BgjZ Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEO+dNsU4E3yXUXRK2zQJF27ox2GcFAmnBzBYACgkQzQJF27ox 2GdReA/9EpousbwuXBi2BuIcCO3v1hH4rymGuw26oLDlpBQaKLYHefOuJ76+UX79 85fI7VdmBCCiHwN/8tr+4HD2Da6XCoiSYTZDjrmwHrMQx29PJoFKpQA0lkxkd+P9 Q95dirUhgXXAycFPaqHOLdgUHcwdwT0Z6Ea6iGfCRPKglgdm1EZIXaqxfiGflOcm TfYVktEs9IthAaKzaNk8z6JAWWdzRR8RWWEPs3JpKKBiBvUG1m4iYgr009NGEEh+ XCGZm3jqgVKrnMLEODXBMpvhqT1eOsGYLUE8sdKsuJZrLOoDLvD2gzESShz+bARD /7TRgQcisuqRrGeAxCHifOZK7ATveuNqLRxiS7bmqaImiz8S3HSzU1JffaK1cXXC Os4atNEnEwWapgY58f0K/0LdzZEbvMMLjWfdOffG7e2qPJNlzvpXA5qkjHaBTbvh NVwtDktVfUsojQK5rTks8wY9trduVOMrWt7Sfw8WeXgnek2yoDkMK4qPcb14fYQH cbuVTMCZkhSmmmFZK95KuDCRYhiwlmZa908To9QBAyeyvWTU5VWNzf0DFnaURrJb nVZUt/LHP7FvjGzwrxg4c51f44PQgBUPuU//vnwJwp5lAZsTqZzvLXOeQ1syn2Z/ iCpELeBSgfx4+0JuzRx9O3o8psFpMEZzCaihazmL7PdQgmTbUIU= =2Kyy -----END PGP SIGNATURE----- --dpWRWTNxWn83BgjZ--