2023-05-12 15:09:52

by Azeem Shaikh

[permalink] [raw]
Subject: [PATCH v2] NFSD: Remove all occurences of strlcpy

strlcpy() reads the entire source buffer first.
This read may exceed the destination size limit.
This is both inefficient and can lead to linear read
overflows if a source string is not NUL-terminated [1].
In an effort to remove strlcpy() completely [2], replace
strlcpy here.

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89

Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
Signed-off-by: Azeem Shaikh <[email protected]>
---
v1: https://lore.kernel.org/all/[email protected]/

Changes in v2:
- Use __assign_str instead of strscpy.
- Added the Fixes tag.

fs/nfsd/trace.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h
index 4183819ea082..72a906a053dc 100644
--- a/fs/nfsd/trace.h
+++ b/fs/nfsd/trace.h
@@ -1365,19 +1365,19 @@ TRACE_EVENT(nfsd_cb_setup,
__field(u32, cl_id)
__field(unsigned long, authflavor)
__sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
- __array(unsigned char, netid, 8)
+ __string(netid, netid)
),
TP_fast_assign(
__entry->cl_boot = clp->cl_clientid.cl_boot;
__entry->cl_id = clp->cl_clientid.cl_id;
- strlcpy(__entry->netid, netid, sizeof(__entry->netid));
+ __assign_str(netid, netid);
__entry->authflavor = authflavor;
__assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
clp->cl_cb_conn.cb_addrlen)
),
TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s",
__get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
- __entry->netid, show_nfsd_authflavor(__entry->authflavor))
+ __get_str(netid), show_nfsd_authflavor(__entry->authflavor))
);

TRACE_EVENT(nfsd_cb_setup_err,
--
2.40.1.606.ga4b1b128d6-goog




2023-05-12 15:17:01

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy



> On May 12, 2023, at 7:53 AM, Azeem Shaikh <[email protected]> wrote:
>
> strlcpy() reads the entire source buffer first.
> This read may exceed the destination size limit.
> This is both inefficient and can lead to linear read
> overflows if a source string is not NUL-terminated [1].
> In an effort to remove strlcpy() completely [2], replace
> strlcpy here.

Let's update the patch description. This change is really
a clean up -- it doesn't address the memory issues you
originally described.


> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
> [2] https://github.com/KSPP/linux/issues/89
>
> Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
> Signed-off-by: Azeem Shaikh <[email protected]>
> ---
> v1: https://lore.kernel.org/all/[email protected]/
>
> Changes in v2:
> - Use __assign_str instead of strscpy.
> - Added the Fixes tag.
>
> fs/nfsd/trace.h | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h
> index 4183819ea082..72a906a053dc 100644
> --- a/fs/nfsd/trace.h
> +++ b/fs/nfsd/trace.h
> @@ -1365,19 +1365,19 @@ TRACE_EVENT(nfsd_cb_setup,
> __field(u32, cl_id)
> __field(unsigned long, authflavor)
> __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
> - __array(unsigned char, netid, 8)
> + __string(netid, netid)
> ),
> TP_fast_assign(
> __entry->cl_boot = clp->cl_clientid.cl_boot;
> __entry->cl_id = clp->cl_clientid.cl_id;
> - strlcpy(__entry->netid, netid, sizeof(__entry->netid));
> + __assign_str(netid, netid);
> __entry->authflavor = authflavor;
> __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
> clp->cl_cb_conn.cb_addrlen)
> ),
> TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s",
> __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
> - __entry->netid, show_nfsd_authflavor(__entry->authflavor))
> + __get_str(netid), show_nfsd_authflavor(__entry->authflavor))
> );
>
> TRACE_EVENT(nfsd_cb_setup_err,
> --
> 2.40.1.606.ga4b1b128d6-goog
>
>

--
Chuck Lever



2023-05-12 17:35:18

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy



> On May 12, 2023, at 8:09 AM, Chuck Lever III <[email protected]> wrote:
>
>
>
>> On May 12, 2023, at 7:53 AM, Azeem Shaikh <[email protected]> wrote:
>>
>> strlcpy() reads the entire source buffer first.
>> This read may exceed the destination size limit.
>> This is both inefficient and can lead to linear read
>> overflows if a source string is not NUL-terminated [1].
>> In an effort to remove strlcpy() completely [2], replace
>> strlcpy here.
>
> Let's update the patch description. This change is really
> a clean up -- it doesn't address the memory issues you
> originally described.

Unless, of course, you intend to apply this patch /after/
a patch that fixes __assign_str(). In that case, no change
to the patch description is needed.

Acked-by: Chuck Lever <[email protected] <mailto:[email protected]>>


>> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
>> [2] https://github.com/KSPP/linux/issues/89
>>
>> Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
>> Signed-off-by: Azeem Shaikh <[email protected]>
>> ---
>> v1: https://lore.kernel.org/all/[email protected]/
>>
>> Changes in v2:
>> - Use __assign_str instead of strscpy.
>> - Added the Fixes tag.
>>
>> fs/nfsd/trace.h | 6 +++---
>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/nfsd/trace.h b/fs/nfsd/trace.h
>> index 4183819ea082..72a906a053dc 100644
>> --- a/fs/nfsd/trace.h
>> +++ b/fs/nfsd/trace.h
>> @@ -1365,19 +1365,19 @@ TRACE_EVENT(nfsd_cb_setup,
>> __field(u32, cl_id)
>> __field(unsigned long, authflavor)
>> __sockaddr(addr, clp->cl_cb_conn.cb_addrlen)
>> - __array(unsigned char, netid, 8)
>> + __string(netid, netid)
>> ),
>> TP_fast_assign(
>> __entry->cl_boot = clp->cl_clientid.cl_boot;
>> __entry->cl_id = clp->cl_clientid.cl_id;
>> - strlcpy(__entry->netid, netid, sizeof(__entry->netid));
>> + __assign_str(netid, netid);
>> __entry->authflavor = authflavor;
>> __assign_sockaddr(addr, &clp->cl_cb_conn.cb_addr,
>> clp->cl_cb_conn.cb_addrlen)
>> ),
>> TP_printk("addr=%pISpc client %08x:%08x proto=%s flavor=%s",
>> __get_sockaddr(addr), __entry->cl_boot, __entry->cl_id,
>> - __entry->netid, show_nfsd_authflavor(__entry->authflavor))
>> + __get_str(netid), show_nfsd_authflavor(__entry->authflavor))
>> );
>>
>> TRACE_EVENT(nfsd_cb_setup_err,
>> --
>> 2.40.1.606.ga4b1b128d6-goog
>>
>>
>
> --
> Chuck Lever


--
Chuck Lever



2023-05-12 20:42:15

by Azeem Shaikh

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy

Resending as plain text.

> >> strlcpy() reads the entire source buffer first.
> >> This read may exceed the destination size limit.
> >> This is both inefficient and can lead to linear read
> >> overflows if a source string is not NUL-terminated [1].
> >> In an effort to remove strlcpy() completely [2], replace
> >> strlcpy here.
> >
> > Let's update the patch description. This change is really
> > a clean up -- it doesn't address the memory issues you
> > originally described.
>
> Unless, of course, you intend to apply this patch /after/
> a patch that fixes __assign_str(). In that case, no change
> to the patch description is needed.

No, I plan to land this patch before attempting to fix __assign_str itself.
Let me know if the below description looks good to you and I'll send
over a v3 patch:

[PATCH v3] NFSD: Remove open coding of string copy

Instead of open coding a __dynamic_array(), use the __string() and
__assign_str()
helper macros that exist for this kind of use case.

Part of an effort to remove deprecated strlcpy() [1] completely from the
kernel[2].

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89

Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
Signed-off-by: Azeem Shaikh <[email protected]>

2023-05-13 03:19:22

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy



> On May 12, 2023, at 1:34 PM, Azeem Shaikh <[email protected]> wrote:
>
> Resending as plain text.
>
>>>> strlcpy() reads the entire source buffer first.
>>>> This read may exceed the destination size limit.
>>>> This is both inefficient and can lead to linear read
>>>> overflows if a source string is not NUL-terminated [1].
>>>> In an effort to remove strlcpy() completely [2], replace
>>>> strlcpy here.
>>>
>>> Let's update the patch description. This change is really
>>> a clean up -- it doesn't address the memory issues you
>>> originally described.
>>
>> Unless, of course, you intend to apply this patch /after/
>> a patch that fixes __assign_str(). In that case, no change
>> to the patch description is needed.
>
> No, I plan to land this patch before attempting to fix __assign_str itself.
> Let me know if the below description looks good to you and I'll send
> over a v3 patch:
>
> [PATCH v3] NFSD: Remove open coding of string copy
>
> Instead of open coding a __dynamic_array(), use the __string() and
> __assign_str()
> helper macros that exist for this kind of use case.
>
> Part of an effort to remove deprecated strlcpy() [1] completely from the
> kernel[2].
>
> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
> [2] https://github.com/KSPP/linux/issues/89
>
> Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
> Signed-off-by: Azeem Shaikh <[email protected]>

This looks good to me. So you'd like me to take this through
the nfsd tree, possibly for 6.4-rc ?


--
Chuck Lever



2023-05-14 02:51:58

by Azeem Shaikh

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy

> > No, I plan to land this patch before attempting to fix __assign_str itself.
> > Let me know if the below description looks good to you and I'll send
> > over a v3 patch:
> >
> > [PATCH v3] NFSD: Remove open coding of string copy
> >
> > Instead of open coding a __dynamic_array(), use the __string() and
> > __assign_str()
> > helper macros that exist for this kind of use case.
> >
> > Part of an effort to remove deprecated strlcpy() [1] completely from the
> > kernel[2].
> >
> > [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
> > [2] https://github.com/KSPP/linux/issues/89
> >
> > Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
> > Signed-off-by: Azeem Shaikh <[email protected]>
>
> This looks good to me. So you'd like me to take this through
> the nfsd tree, possibly for 6.4-rc ?
>

This is my first week contributing to the Linux kernel so I might be
miscommunicating :)
By "land this patch", I meant to get this patch into to the nfsd tree.
I'll leave it up to you when you push it through to the mainline tree.
Although, it would be great to get this through to 6.4-rc if that's at
all possible.

2023-05-14 18:39:53

by Chuck Lever III

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy



> On May 13, 2023, at 10:44 PM, Azeem Shaikh <[email protected]> wrote:
>
>>> No, I plan to land this patch before attempting to fix __assign_str itself.
>>> Let me know if the below description looks good to you and I'll send
>>> over a v3 patch:
>>>
>>> [PATCH v3] NFSD: Remove open coding of string copy
>>>
>>> Instead of open coding a __dynamic_array(), use the __string() and
>>> __assign_str()
>>> helper macros that exist for this kind of use case.
>>>
>>> Part of an effort to remove deprecated strlcpy() [1] completely from the
>>> kernel[2].
>>>
>>> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
>>> [2] https://github.com/KSPP/linux/issues/89
>>>
>>> Fixes: 3c92fba557c6 ("NFSD: Enhance the nfsd_cb_setup tracepoint")
>>> Signed-off-by: Azeem Shaikh <[email protected]>
>>
>> This looks good to me. So you'd like me to take this through
>> the nfsd tree, possibly for 6.4-rc ?
>>
>
> This is my first week contributing to the Linux kernel so I might be
> miscommunicating :)
> By "land this patch", I meant to get this patch into to the nfsd tree.
> I'll leave it up to you when you push it through to the mainline tree.
> Although, it would be great to get this through to 6.4-rc if that's at
> all possible.

Please send v3 along, and I will apply it to nfsd-fixes.


--
Chuck Lever



2023-05-15 02:42:38

by Azeem Shaikh

[permalink] [raw]
Subject: Re: [PATCH v2] NFSD: Remove all occurences of strlcpy

>
> Please send v3 along, and I will apply it to nfsd-fixes.
>

Done. Thanks!