From: Stephen Hemminger <stephen@networkplumber.org>
To: netdev@vger.kernel.org
Cc: dsahern@kernel.org, Stephen Hemminger <stephen@networkplumber.org>
Subject: [PATCH iproute2 07/11] ss: fix rpcbind service cache
Date: Mon, 9 Nov 2026 13:25:23 -0800 [thread overview]
Message-ID: <20261109212559.39661-8-stephen@networkplumber.org> (raw)
In-Reply-To: <20261109212559.39661-1-stephen@networkplumber.org>
init_service_resolver() left the name of an entry uninitialized
when the program was not in the rpc database, so ss -r could crash
using it. It also leaked an entry on every skipped mapping and
accepted a partly parsed address.
Parse the mapping before allocating, and name unknown programs by
number.
Reported-by: Anthropic OSS scanner (ANT-2026-M2GWD3L5)
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
misc/ss.c | 44 ++++++++++++++++++++++++++------------------
1 file changed, 26 insertions(+), 18 deletions(-)
diff --git a/misc/ss.c b/misc/ss.c
index e0b26586..74cb3be1 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1559,37 +1559,45 @@ static void init_service_resolver(void)
return;
for (; rhead; rhead = rhead->rpcb_next) {
- char prog[128] = "rpc.";
+ const char *proto;
+ char prog[128];
struct scache *c;
- int hport, lport, ok;
+ int hport, lport;
- c = malloc(sizeof(*c));
- if (!c)
+ if (sscanf(rhead->rpcb_map.r_addr, "::.%d.%d",
+ &hport, &lport) != 2 &&
+ sscanf(rhead->rpcb_map.r_addr, "0.0.0.0.%d.%d",
+ &hport, &lport) != 2)
continue;
- ok = sscanf(rhead->rpcb_map.r_addr, "::.%d.%d", &hport, &lport);
- if (!ok)
- ok = sscanf(rhead->rpcb_map.r_addr, "0.0.0.0.%d.%d",
- &hport, &lport);
- if (!ok)
- continue;
- c->port = hport << 8 | lport;
-
if (strcmp(rhead->rpcb_map.r_netid, TCP_PROTO) == 0 ||
strcmp(rhead->rpcb_map.r_netid, TCP6_PROTO) == 0)
- c->proto = TCP_PROTO;
+ proto = TCP_PROTO;
else if (strcmp(rhead->rpcb_map.r_netid, UDP_PROTO) == 0 ||
strcmp(rhead->rpcb_map.r_netid, UDP6_PROTO) == 0)
- c->proto = UDP_PROTO;
+ proto = UDP_PROTO;
else if (strcmp(rhead->rpcb_map.r_netid, SCTP_PROTO) == 0)
- c->proto = SCTP_PROTO;
+ proto = SCTP_PROTO;
else
continue;
rpc = getrpcbynumber(rhead->rpcb_map.r_prog);
- if (rpc) {
- strncat(prog, rpc->r_name, 128 - strlen(prog));
- c->name = strdup(prog);
+ if (rpc)
+ snprintf(prog, sizeof(prog), "rpc.%s", rpc->r_name);
+ else
+ snprintf(prog, sizeof(prog), "rpc.%lu",
+ (unsigned long)rhead->rpcb_map.r_prog);
+
+ c = malloc(sizeof(*c));
+ if (!c)
+ continue;
+
+ c->port = hport << 8 | lport;
+ c->proto = proto;
+ c->name = strdup(prog);
+ if (!c->name) {
+ free(c);
+ continue;
}
c->next = rlist;
--
2.53.0
next prev parent reply other threads:[~2026-11-09 21:26 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 21:25 [PATCH iproute2 00/11] ss fixes from an OSS scan Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 01/11] ss: fix double close on sock_diag send failure Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 02/11] ss: drop /proc fallback for socket listing Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 03/11] ss: escape names chosen by the socket owner Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 04/11] ss: size the TCPDIAG_FILE buffer to the record Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 05/11] ss: replay all dumps in TCPDIAG_FILE Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 06/11] ss: bound state and type name lookups Stephen Hemminger
2026-11-09 21:25 ` Stephen Hemminger [this message]
2026-11-09 21:25 ` [PATCH iproute2 08/11] ss: read socket SELinux context only for -z Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 09/11] ss: check owner before naming a netlink socket Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 10/11] ss: keep following events after ENOBUFS Stephen Hemminger
2026-11-09 21:25 ` [PATCH iproute2 11/11] ss: report a failed SCTP or MPTCP dump Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261109212559.39661-8-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=dsahern@kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox