git: 58a369a6f6ce - stable/15 - sockstat: Surround explicit IPv6 addresses with brackets

From: Michael Osipov <michaelo_at_FreeBSD.org>
Date: Sat, 07 Feb 2026 09:52:16 UTC
The branch stable/15 has been updated by michaelo:

URL: https://cgit.FreeBSD.org/src/commit/?id=58a369a6f6ce6786ef7aa4715c96548f36ae3962

commit 58a369a6f6ce6786ef7aa4715c96548f36ae3962
Author:     Michael Osipov <michaelo@FreeBSD.org>
AuthorDate: 2025-12-26 17:27:12 +0000
Commit:     Michael Osipov <michaelo@FreeBSD.org>
CommitDate: 2026-02-07 09:51:50 +0000

    sockstat: Surround explicit IPv6 addresses with brackets
    
    PR:             254611
    Approved by:    otis, tuexen, des
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D54375
    
    (cherry picked from commit fe81e3944c085e765c83c4f78941d7529ceb556e)
---
 usr.bin/sockstat/main.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/usr.bin/sockstat/main.c b/usr.bin/sockstat/main.c
index 75c4b2aad223..df09245a8f0d 100644
--- a/usr.bin/sockstat/main.c
+++ b/usr.bin/sockstat/main.c
@@ -897,6 +897,7 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
 	struct sockaddr_un *sun;
 	int error, off, port = 0;
 	char addrstr[NI_MAXHOST] = "";
+	bool needs_ipv6_brackets = false;
 
 	switch (ss->ss_family) {
 	case AF_INET:
@@ -907,6 +908,8 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
 	case AF_INET6:
 		if (IN6_IS_ADDR_UNSPECIFIED(&sstosin6(ss)->sin6_addr))
 			addrstr[0] = '*';
+		else
+			needs_ipv6_brackets = true;
 		port = ntohs(sstosin6(ss)->sin6_port);
 		break;
 	case AF_UNIX:
@@ -915,7 +918,7 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
 		if (is_xo_style_encoding) {
 			xo_emit("{:path/%.*s}", sun->sun_len - off,
 				sun->sun_path);
-			return 0;
+			return (0);
 		}
 		return snprintf(buf, bufsize, "%.*s",
 				sun->sun_len - off, sun->sun_path);
@@ -931,6 +934,11 @@ formataddr(struct sockaddr_storage *ss, char *buf, size_t bufsize)
 		xo_emit("{:port/%d}", port);
 		return (0);
 	}
+	if (needs_ipv6_brackets) {
+		if (port == 0)
+			return (snprintf(buf, bufsize, "[%s]:*", addrstr));
+		return (snprintf(buf, bufsize, "[%s]:%d", addrstr, port));
+	}
 	if (port == 0)
 		return (snprintf(buf, bufsize, "%s:*", addrstr));
 	return (snprintf(buf, bufsize, "%s:%d", addrstr, port));