Re: [PATCH 05/14] NFSD: move from strlcpy with unused retval to strscpy

From: Chuck Lever III
Date: Thu Aug 18 2022 - 17:17:13 EST




> On Aug 18, 2022, at 5:01 PM, Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> Follow the advice of the below link and prefer 'strscpy' in this
> subsystem. Conversion is 1:1 because the return value is not used.
> Generated by a coccinelle script.
>
> Link: https://lore.kernel.org/r/CAHk-=wgfRnXz0W3D37d01q3JFkr_i_uTL=V6A6G1oUZcprmknw@xxxxxxxxxxxxxx/
> Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>

Makes sense.

I think I would like to carry 05 and 07 in the NFSD tree so they
can get some exposure to our test workloads before they are merged.
Is that OK with you?


> ---
> fs/nfsd/nfs4idmap.c | 8 ++++----
> fs/nfsd/nfs4proc.c | 2 +-
> fs/nfsd/nfssvc.c | 2 +-
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/fs/nfsd/nfs4idmap.c b/fs/nfsd/nfs4idmap.c
> index f92161ce1f97..e70a1a2999b7 100644
> --- a/fs/nfsd/nfs4idmap.c
> +++ b/fs/nfsd/nfs4idmap.c
> @@ -82,8 +82,8 @@ ent_init(struct cache_head *cnew, struct cache_head *citm)
> new->id = itm->id;
> new->type = itm->type;
>
> - strlcpy(new->name, itm->name, sizeof(new->name));
> - strlcpy(new->authname, itm->authname, sizeof(new->authname));
> + strscpy(new->name, itm->name, sizeof(new->name));
> + strscpy(new->authname, itm->authname, sizeof(new->authname));
> }
>
> static void
> @@ -548,7 +548,7 @@ idmap_name_to_id(struct svc_rqst *rqstp, int type, const char *name, u32 namelen
> return nfserr_badowner;
> memcpy(key.name, name, namelen);
> key.name[namelen] = '\0';
> - strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
> + strscpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
> ret = idmap_lookup(rqstp, nametoid_lookup, &key, nn->nametoid_cache, &item);
> if (ret == -ENOENT)
> return nfserr_badowner;
> @@ -584,7 +584,7 @@ static __be32 idmap_id_to_name(struct xdr_stream *xdr,
> int ret;
> struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
>
> - strlcpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
> + strscpy(key.authname, rqst_authname(rqstp), sizeof(key.authname));
> ret = idmap_lookup(rqstp, idtoname_lookup, &key, nn->idtoname_cache, &item);
> if (ret == -ENOENT)
> return encode_ascii_id(xdr, id);
> diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
> index a72ab97f77ef..0437210b9898 100644
> --- a/fs/nfsd/nfs4proc.c
> +++ b/fs/nfsd/nfs4proc.c
> @@ -1343,7 +1343,7 @@ static __be32 nfsd4_ssc_setup_dul(struct nfsd_net *nn, char *ipaddr,
> return 0;
> }
> if (work) {
> - strlcpy(work->nsui_ipaddr, ipaddr, sizeof(work->nsui_ipaddr) - 1);
> + strscpy(work->nsui_ipaddr, ipaddr, sizeof(work->nsui_ipaddr) - 1);
> refcount_set(&work->nsui_refcnt, 2);
> work->nsui_busy = true;
> list_add_tail(&work->nsui_list, &nn->nfsd_ssc_mount_list);
> diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
> index 4bb5baa17040..bfbd9f672f59 100644
> --- a/fs/nfsd/nfssvc.c
> +++ b/fs/nfsd/nfssvc.c
> @@ -799,7 +799,7 @@ nfsd_svc(int nrservs, struct net *net, const struct cred *cred)
> if (nrservs == 0 && nn->nfsd_serv == NULL)
> goto out;
>
> - strlcpy(nn->nfsd_name, utsname()->nodename,
> + strscpy(nn->nfsd_name, utsname()->nodename,
> sizeof(nn->nfsd_name));
>
> error = nfsd_create_serv(net);
> --
> 2.35.1
>

--
Chuck Lever