Re: [PATCH 02/28] sunrpc: Refactor rpc_sockaddr2uaddr() to use snprintf() instead of strlcat()
From: Jeff Layton
Date: Tue Sep 15 2026 - 06:55:08 EST
On Tue, 2026-09-15 at 08:18 +0000, Bill Wendling wrote:
> rpc_sockaddr2uaddr() formats the IP address into "addrbuf", formats the
> port into a temporary "portbuf" buffer with snprintf(), and then appends
> "portbuf" to "addrbuf" using strlcat().
>
> In preparation for removing the deprecated strlcat() API[1], capture the
> length returned by rpc_ntop4() and rpc_ntop6_noscopeid() and format the
> port directly onto the end of "addrbuf" with snprintf(). This eliminates
> the strlcat() call and the temporary "portbuf" buffer.
>
> Link: https://github.com/KSPP/linux/issues/370 [1]
> Cc: codemender-patching+linux@xxxxxxxxxx
> Assisted-by: CoPilot:3.5-sonnet [editor_update_file, shell_command_run]
> Signed-off-by: Bill Wendling <morbo@xxxxxxxxxx>
> ---
> Cc: Russell King <linux@xxxxxxxxxxxxxxx>
> Cc: Huacai Chen <chenhuacai@xxxxxxxxxx>
> Cc: WANG Xuerui <kernel@xxxxxxxxxx>
> Cc: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> Cc: "James E.J. Bottomley" <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx>
> Cc: Helge Deller <deller@xxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: Borislav Petkov <bp@xxxxxxxxx>
> Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
> Cc: x86@xxxxxxxxxx
> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>
> Cc: Ian Abbott <abbotti@xxxxxxxxx>
> Cc: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx>
> Cc: Tony Luck <tony.luck@xxxxxxxxx>
> Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx>
> Cc: Maxime Ripard <mripard@xxxxxxxxxx>
> Cc: Thomas Zimmermann <tzimmermann@xxxxxxx>
> Cc: David Airlie <airlied@xxxxxxxxx>
> Cc: Simona Vetter <simona@xxxxxxxx>
> Cc: Matthew Brost <matthew.brost@xxxxxxxxx>
> Cc: "Thomas Hellström" <thomas.hellstrom@xxxxxxxxxxxxxxx>
> Cc: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx>
> Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
> Cc: Matthias Schwarzott <zzam@xxxxxxxxxx>
> Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
> Cc: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
> Cc: Przemek Kitszel <przemyslaw.kitszel@xxxxxxxxx>
> Cc: Andrew Lunn <andrew+netdev@xxxxxxx>
> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx>
> Cc: Eric Dumazet <edumazet@xxxxxxxxxx>
> Cc: Jakub Kicinski <kuba@xxxxxxxxxx>
> Cc: Paolo Abeni <pabeni@xxxxxxxxxx>
> Cc: Arend van Spriel <arend.vanspriel@xxxxxxxxxxxx>
> Cc: Rob Herring <robh@xxxxxxxxxx>
> Cc: Saravana Kannan <saravanak@xxxxxxxxxx>
> Cc: Krzysztof Kozlowski <krzk@xxxxxxxxxx>
> Cc: Sylwester Nawrocki <s.nawrocki@xxxxxxxxxxx>
> Cc: Peter Griffin <peter.griffin@xxxxxxxxxx>
> Cc: Alim Akhtar <alim.akhtar@xxxxxxxxxxx>
> Cc: Linus Walleij <linusw@xxxxxxxxxx>
> Cc: Anil Gurumurthy <anil.gurumurthy@xxxxxxxxxx>
> Cc: Sudarsana Kalluru <sudarsana.kalluru@xxxxxxxxxx>
> Cc: "Martin K. Petersen" <mkp@xxxxxxxxxx>
> Cc: Trond Myklebust <trondmy@xxxxxxxxxx>
> Cc: Anna Schumaker <anna@xxxxxxxxxx>
> Cc: Mike Marshall <hubcap@xxxxxxxxxxxx>
> Cc: Martin Brandenburg <martin@xxxxxxxxxxxx>
> Cc: Kees Cook <kees@xxxxxxxxxx>
> Cc: Jiri Pirko <jiri@xxxxxxxxxxx>
> Cc: Simon Horman <horms@xxxxxxxxxx>
> Cc: Chuck Lever <cel@xxxxxxxxxx>
> Cc: Jeff Layton <jlayton@xxxxxxxxxx>
> Cc: NeilBrown <neil@xxxxxxxxxx>
> Cc: Olga Kornievskaia <okorniev@xxxxxxxxxx>
> Cc: Dai Ngo <Dai.Ngo@xxxxxxxxxx>
> Cc: Tom Talpey <tom@xxxxxxxxxx>
> Cc: Jaroslav Kysela <perex@xxxxxxxx>
> Cc: Takashi Iwai <tiwai@xxxxxxxx>
> Cc: Bill Wendling <morbo@xxxxxxxxxx>
> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Cc: "Mike Rapoport (Microsoft)" <rppt@xxxxxxxxxx>
> Cc: Kanglong Wang <wangkanglong@xxxxxxxxxxx>
> Cc: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx>
> Cc: Qiang Ma <maqianga@xxxxxxxxxxxxx>
> Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> Cc: Pengpeng Hou <pengpeng@xxxxxxxxxxx>
> Cc: Ard Biesheuvel <ardb@xxxxxxxxxx>
> Cc: Breno Leitao <leitao@xxxxxxxxxx>
> Cc: Thorsten Blum <blum@xxxxxxxxxx>
> Cc: Harshit Mogalapalli <harshit.m.mogalapalli@xxxxxxxxxx>
> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: Lyude Paul <lyude@xxxxxxxxxx>
> Cc: Ashutosh Desai <ashutoshdesai993@xxxxxxxxx>
> Cc: Imre Deak <imre.deak@xxxxxxxxx>
> Cc: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
> Cc: Johan Hovold <johan@xxxxxxxxxx>
> Cc: Johannes Berg <johannes.berg@xxxxxxxxx>
> Cc: Miri Korenblit <miriam.rachel.korenblit@xxxxxxxxx>
> Cc: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx>
> Cc: Cryolitia PukNgae <cryolitia@xxxxxxxxxxxxx>
> Cc: Jiaming Zhang <r772577952@xxxxxxxxx>
> Cc: Will Porter <mrwillporter@xxxxxxxxx>
> Cc: Cen Zhang <zzzccc427@xxxxxxxxx>
> Cc: "Cássio Gabriel" <cassiogabrielcontato@xxxxxxxxx>
> Cc: Rong Zhang <i@xxxxxxxx>
> Cc: Arun Raghavan <arunr@xxxxxxxxxxxxxxxxx>
> Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Cc: loongarch@xxxxxxxxxxxxxxx
> Cc: linux-mips@xxxxxxxxxxxxxxx
> Cc: linux-parisc@xxxxxxxxxxxxxxx
> Cc: linux-edac@xxxxxxxxxxxxxxx
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> Cc: intel-xe@xxxxxxxxxxxxxxxxxxxxx
> Cc: linux-input@xxxxxxxxxxxxxxx
> Cc: linux-media@xxxxxxxxxxxxxxx
> Cc: intel-wired-lan@xxxxxxxxxxxxxxxx
> Cc: netdev@xxxxxxxxxxxxxxx
> Cc: linux-wireless@xxxxxxxxxxxxxxx
> Cc: brcm80211@xxxxxxxxxxxxxxx
> Cc: brcm80211-dev-list.pdl@xxxxxxxxxxxx
> Cc: devicetree@xxxxxxxxxxxxxxx
> Cc: linux-samsung-soc@xxxxxxxxxxxxxxx
> Cc: linux-gpio@xxxxxxxxxxxxxxx
> Cc: linux-scsi@xxxxxxxxxxxxxxx
> Cc: linux-nfs@xxxxxxxxxxxxxxx
> Cc: devel@xxxxxxxxxxxxxxxxxx
> Cc: linux-hardening@xxxxxxxxxxxxxxx
> Cc: linux-sound@xxxxxxxxxxxxxxx
> ---
> net/sunrpc/addr.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/net/sunrpc/addr.c b/net/sunrpc/addr.c
> index 97ff11973c49..a1e4173e5a53 100644
> --- a/net/sunrpc/addr.c
> +++ b/net/sunrpc/addr.c
> @@ -264,18 +264,20 @@ EXPORT_SYMBOL_GPL(rpc_pton);
> */
> char *rpc_sockaddr2uaddr(const struct sockaddr *sap, gfp_t gfp_flags)
> {
> - char portbuf[RPCBIND_MAXUADDRPLEN];
> char addrbuf[RPCBIND_MAXUADDRLEN];
> unsigned short port;
> + size_t len;
>
> switch (sap->sa_family) {
> case AF_INET:
> - if (rpc_ntop4(sap, addrbuf, sizeof(addrbuf)) == 0)
> + len = rpc_ntop4(sap, addrbuf, sizeof(addrbuf));
> + if (len == 0 || len >= sizeof(addrbuf))
> return NULL;
> port = ntohs(((struct sockaddr_in *)sap)->sin_port);
> break;
> case AF_INET6:
> - if (rpc_ntop6_noscopeid(sap, addrbuf, sizeof(addrbuf)) == 0)
> + len = rpc_ntop6_noscopeid(sap, addrbuf, sizeof(addrbuf));
> + if (len == 0 || len >= sizeof(addrbuf))
> return NULL;
> port = ntohs(((struct sockaddr_in6 *)sap)->sin6_port);
> break;
> @@ -283,11 +285,8 @@ char *rpc_sockaddr2uaddr(const struct sockaddr *sap, gfp_t gfp_flags)
> return NULL;
> }
>
> - if (snprintf(portbuf, sizeof(portbuf),
> - ".%u.%u", port >> 8, port & 0xff) >= (int)sizeof(portbuf))
> - return NULL;
> -
> - if (strlcat(addrbuf, portbuf, sizeof(addrbuf)) >= sizeof(addrbuf))
> + if (snprintf(addrbuf + len, sizeof(addrbuf) - len,
> + ".%u.%u", port >> 8, port & 0xff) >= sizeof(addrbuf) - len)
> return NULL;
>
> return kstrdup(addrbuf, gfp_flags);
> @@ -352,3 +351,4 @@ size_t rpc_uaddr2sockaddr(struct net *net, const char *uaddr,
> return 0;
> }
> EXPORT_SYMBOL_GPL(rpc_uaddr2sockaddr);
> +
The last blank line here is not needed. The rest looks fine though.
Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>