[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220922120105.7a200fd2@hermes.local>
Date: Thu, 22 Sep 2022 12:01:05 -0700
From: Stephen Hemminger <stephen@...workplumber.org>
To: OGAWA Hirofumi <hirofumi@...l.parknet.co.jp>
Cc: netdev@...r.kernel.org
Subject: Re: [PATCH iproute2] Fix segv on "-r" option if unknown rpc service
On Sun, 18 Sep 2022 02:50:54 +0900
OGAWA Hirofumi <hirofumi@...l.parknet.co.jp> wrote:
> + } else {
> + const char fmt[] = "%s%u";
> + char *buf = NULL;
> + int len = snprintf(buf, 0, fmt, prog,
> + rhead->rpcb_map.r_prog);
> + len++;
> + buf = malloc(len);
> + snprintf(buf, len, fmt, prog, rhead->rpcb_map.r_prog);
> + c->name = buf;
> }
Thanks for finding the bug but this could be improved.
This seems like the hard way to do this.
You are reinventing asprintf().
Would this work instead.
diff --git a/misc/ss.c b/misc/ss.c
index ff985cd8cae9..9d3d0bd84df3 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -1596,6 +1596,10 @@ static void init_service_resolver(void)
if (rpc) {
strncat(prog, rpc->r_name, 128 - strlen(prog));
c->name = strdup(prog);
+ } else if (asprintf(&c->name, "%s%u",
+ prog, rhead->rpcb_map.r_prog) < 0) {
+ fprintf(stderr, "ss: asprintf failed to allocate buffer\n");
+ abort();
}
c->next = rlist;
Powered by blists - more mailing lists