Message ID | 20241106024952.494718-1-danielyangkang@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | nfs_sysfs_link_rpc_client(): Replace strcpy with strscpy | expand |
On 5 Nov 2024, at 21:49, Daniel Yang wrote: > The function strcpy is deprecated due to lack of bounds checking. The > recommended replacement is strscpy. > > Signed-off-by: Daniel Yang <danielyangkang@gmail.com> Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Ben
On Wed, Nov 6, 2024 at 3:49 AM Daniel Yang <danielyangkang@gmail.com> wrote: > > The function strcpy is deprecated due to lack of bounds checking. The > recommended replacement is strscpy. > > Signed-off-by: Daniel Yang <danielyangkang@gmail.com> > --- > fs/nfs/sysfs.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/nfs/sysfs.c b/fs/nfs/sysfs.c > index bf378ecd5..f3d0b2ef9 100644 > --- a/fs/nfs/sysfs.c > +++ b/fs/nfs/sysfs.c > @@ -280,7 +280,7 @@ void nfs_sysfs_link_rpc_client(struct nfs_server *server, > char name[RPC_CLIENT_NAME_SIZE]; > int ret; > > - strcpy(name, clnt->cl_program->name); > + strscpy(name, clnt->cl_program->name); How should the "bounds checking" work in this case if you only pass two arguments ? Per https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html |strscpy()| takes three arguments... ---- Bye, Roland
On 6 Nov 2024, at 15:20, Roland Mainz wrote: > On Wed, Nov 6, 2024 at 3:49 AM Daniel Yang <danielyangkang@gmail.com> wrote: >> >> The function strcpy is deprecated due to lack of bounds checking. The >> recommended replacement is strscpy. >> >> Signed-off-by: Daniel Yang <danielyangkang@gmail.com> >> --- >> fs/nfs/sysfs.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/fs/nfs/sysfs.c b/fs/nfs/sysfs.c >> index bf378ecd5..f3d0b2ef9 100644 >> --- a/fs/nfs/sysfs.c >> +++ b/fs/nfs/sysfs.c >> @@ -280,7 +280,7 @@ void nfs_sysfs_link_rpc_client(struct nfs_server *server, >> char name[RPC_CLIENT_NAME_SIZE]; >> int ret; >> >> - strcpy(name, clnt->cl_program->name); >> + strscpy(name, clnt->cl_program->name); > > How should the "bounds checking" work in this case if you only pass > two arguments ? The linux kernel strscpy() checks the sizeof the destination. Ben
On Wed, Nov 6, 2024 at 9:40 PM Benjamin Coddington <bcodding@redhat.com> wrote: > > On 6 Nov 2024, at 15:20, Roland Mainz wrote: > > > On Wed, Nov 6, 2024 at 3:49 AM Daniel Yang <danielyangkang@gmail.com> wrote: > >> > >> The function strcpy is deprecated due to lack of bounds checking. The > >> recommended replacement is strscpy. > >> > >> Signed-off-by: Daniel Yang <danielyangkang@gmail.com> > >> --- > >> fs/nfs/sysfs.c | 2 +- > >> 1 file changed, 1 insertion(+), 1 deletion(-) > >> > >> diff --git a/fs/nfs/sysfs.c b/fs/nfs/sysfs.c > >> index bf378ecd5..f3d0b2ef9 100644 > >> --- a/fs/nfs/sysfs.c > >> +++ b/fs/nfs/sysfs.c > >> @@ -280,7 +280,7 @@ void nfs_sysfs_link_rpc_client(struct nfs_server *server, > >> char name[RPC_CLIENT_NAME_SIZE]; > >> int ret; > >> > >> - strcpy(name, clnt->cl_program->name); > >> + strscpy(name, clnt->cl_program->name); > > > > How should the "bounds checking" work in this case if you only pass > > two arguments ? > > The linux kernel strscpy() checks the sizeof the destination. Then the kernel strscpy() should be renamed accordingly, and not confuse people. Suggested name would be kstrscpy(). Otherwise this would disqualify strscpy() ever from being adopted as a POSIX standard, as there are two - kernel and glibc - conflicting implementations Sebi
On 9 Nov 2024, at 6:11, Sebastian Feld wrote: > On Wed, Nov 6, 2024 at 9:40 PM Benjamin Coddington <bcodding@redhat.com> wrote: >> >> On 6 Nov 2024, at 15:20, Roland Mainz wrote: >> >>> On Wed, Nov 6, 2024 at 3:49 AM Daniel Yang <danielyangkang@gmail.com> wrote: >>>> >>>> The function strcpy is deprecated due to lack of bounds checking. The >>>> recommended replacement is strscpy. >>>> >>>> Signed-off-by: Daniel Yang <danielyangkang@gmail.com> >>>> --- >>>> fs/nfs/sysfs.c | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/fs/nfs/sysfs.c b/fs/nfs/sysfs.c >>>> index bf378ecd5..f3d0b2ef9 100644 >>>> --- a/fs/nfs/sysfs.c >>>> +++ b/fs/nfs/sysfs.c >>>> @@ -280,7 +280,7 @@ void nfs_sysfs_link_rpc_client(struct nfs_server *server, >>>> char name[RPC_CLIENT_NAME_SIZE]; >>>> int ret; >>>> >>>> - strcpy(name, clnt->cl_program->name); >>>> + strscpy(name, clnt->cl_program->name); >>> >>> How should the "bounds checking" work in this case if you only pass >>> two arguments ? >> >> The linux kernel strscpy() checks the sizeof the destination. > > Then the kernel strscpy() should be renamed accordingly, and not > confuse people. Suggested name would be kstrscpy(). > Otherwise this would disqualify strscpy() ever from being adopted as a > POSIX standard, as there are two - kernel and glibc - conflicting > implementations I should have said the linux kernel strscpy() can accept only two args if the destination is a statically-defined array. Most uses are the three arg version. Ben
On Sat, Nov 09, 2024 at 12:11:02PM +0100, Sebastian Feld wrote: > > > How should the "bounds checking" work in this case if you only pass > > > two arguments ? > > > > The linux kernel strscpy() checks the sizeof the destination. > > Then the kernel strscpy() should be renamed accordingly, and not > confuse people. Suggested name would be kstrscpy(). > Otherwise this would disqualify strscpy() ever from being adopted as a > POSIX standard, as there are two - kernel and glibc - conflicting > implementations If POSIX decided that this meant they couldn't adopt strscpy(), that is ANSI / ISO's problem, not ours. Note that strscpy() supports the 3 argument version of glibc, and POSIX has always been willing to standardize a subset of a particullar interface. Otherwise, any Legacy Unix system which added some one or more flags to some particular interface could potentially disqualify anything with the same name of that interface from ever being standardized, which is (a) stupid, and (b) not what has been done in historical practice. - Ted
diff --git a/fs/nfs/sysfs.c b/fs/nfs/sysfs.c index bf378ecd5..f3d0b2ef9 100644 --- a/fs/nfs/sysfs.c +++ b/fs/nfs/sysfs.c @@ -280,7 +280,7 @@ void nfs_sysfs_link_rpc_client(struct nfs_server *server, char name[RPC_CLIENT_NAME_SIZE]; int ret; - strcpy(name, clnt->cl_program->name); + strscpy(name, clnt->cl_program->name); strcat(name, uniq ? uniq : ""); strcat(name, "_client");
The function strcpy is deprecated due to lack of bounds checking. The recommended replacement is strscpy. Signed-off-by: Daniel Yang <danielyangkang@gmail.com> --- fs/nfs/sysfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)