diff mbox series

ieee802154: Replace strlcpy with strscpy

Message ID 20230613003326.3538391-1-azeemshaikh38@gmail.com (mailing list archive)
State Accepted
Headers show
Series ieee802154: Replace strlcpy with strscpy | expand

Commit Message

Azeem Shaikh June 13, 2023, 12:33 a.m. UTC
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 with strscpy().

Direct replacement is safe here since the return values
from the helper macros are ignored by the callers.

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

Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
---
 net/ieee802154/trace.h |    2 +-
 net/mac802154/trace.h  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Kees Cook June 13, 2023, 7:25 p.m. UTC | #1
On Tue, Jun 13, 2023 at 12:33:25AM +0000, Azeem Shaikh 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 with strscpy().
> 
> Direct replacement is safe here since the return values
> from the helper macros are ignored by the callers.
> 
> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
> [2] https://github.com/KSPP/linux/issues/89
> 
> Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>

Reviewed-by: Kees Cook <keescook@chromium.org>
Simon Horman June 14, 2023, 12:09 p.m. UTC | #2
On Tue, Jun 13, 2023 at 12:33:25AM +0000, Azeem Shaikh 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 with strscpy().
> 
> Direct replacement is safe here since the return values
> from the helper macros are ignored by the callers.
> 
> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
> [2] https://github.com/KSPP/linux/issues/89
> 
> Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>

Reviewed-by: Simon Horman <simon.horman@corigine.com>
Stefan Schmidt June 16, 2023, 9:32 p.m. UTC | #3
Hello.

On 13.06.23 02:33, Azeem Shaikh 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 with strscpy().
> 
> Direct replacement is safe here since the return values
> from the helper macros are ignored by the callers.
> 
> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
> [2] https://github.com/KSPP/linux/issues/89
> 
> Signed-off-by: Azeem Shaikh <azeemshaikh38@gmail.com>
> ---
>   net/ieee802154/trace.h |    2 +-
>   net/mac802154/trace.h  |    2 +-
>   2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/net/ieee802154/trace.h b/net/ieee802154/trace.h
> index e5d8439b9e45..c16db0b326fa 100644
> --- a/net/ieee802154/trace.h
> +++ b/net/ieee802154/trace.h
> @@ -13,7 +13,7 @@
>   
>   #define MAXNAME		32
>   #define WPAN_PHY_ENTRY	__array(char, wpan_phy_name, MAXNAME)
> -#define WPAN_PHY_ASSIGN	strlcpy(__entry->wpan_phy_name,	 \
> +#define WPAN_PHY_ASSIGN	strscpy(__entry->wpan_phy_name,	 \
>   				wpan_phy_name(wpan_phy), \
>   				MAXNAME)
>   #define WPAN_PHY_PR_FMT	"%s"
> diff --git a/net/mac802154/trace.h b/net/mac802154/trace.h
> index 689396d6c76a..1574ecc48075 100644
> --- a/net/mac802154/trace.h
> +++ b/net/mac802154/trace.h
> @@ -14,7 +14,7 @@
>   
>   #define MAXNAME		32
>   #define LOCAL_ENTRY	__array(char, wpan_phy_name, MAXNAME)
> -#define LOCAL_ASSIGN	strlcpy(__entry->wpan_phy_name, \
> +#define LOCAL_ASSIGN	strscpy(__entry->wpan_phy_name, \
>   				wpan_phy_name(local->hw.phy), MAXNAME)
>   #define LOCAL_PR_FMT	"%s"
>   #define LOCAL_PR_ARG	__entry->wpan_phy_name


This patch has been applied to the wpan tree and will be
part of the next pull request to net. Thanks!

regards
Stefan Schmidt
diff mbox series

Patch

diff --git a/net/ieee802154/trace.h b/net/ieee802154/trace.h
index e5d8439b9e45..c16db0b326fa 100644
--- a/net/ieee802154/trace.h
+++ b/net/ieee802154/trace.h
@@ -13,7 +13,7 @@ 
 
 #define MAXNAME		32
 #define WPAN_PHY_ENTRY	__array(char, wpan_phy_name, MAXNAME)
-#define WPAN_PHY_ASSIGN	strlcpy(__entry->wpan_phy_name,	 \
+#define WPAN_PHY_ASSIGN	strscpy(__entry->wpan_phy_name,	 \
 				wpan_phy_name(wpan_phy), \
 				MAXNAME)
 #define WPAN_PHY_PR_FMT	"%s"
diff --git a/net/mac802154/trace.h b/net/mac802154/trace.h
index 689396d6c76a..1574ecc48075 100644
--- a/net/mac802154/trace.h
+++ b/net/mac802154/trace.h
@@ -14,7 +14,7 @@ 
 
 #define MAXNAME		32
 #define LOCAL_ENTRY	__array(char, wpan_phy_name, MAXNAME)
-#define LOCAL_ASSIGN	strlcpy(__entry->wpan_phy_name, \
+#define LOCAL_ASSIGN	strscpy(__entry->wpan_phy_name, \
 				wpan_phy_name(local->hw.phy), MAXNAME)
 #define LOCAL_PR_FMT	"%s"
 #define LOCAL_PR_ARG	__entry->wpan_phy_name