netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2] net/rds: use strscpy() to instead of strncpy()
@ 2023-01-11  6:25 yang.yang29
  2023-01-13  5:17 ` Jakub Kicinski
  0 siblings, 1 reply; 4+ messages in thread
From: yang.yang29 @ 2023-01-11  6:25 UTC (permalink / raw)
  To: santosh.shilimkar, kuba
  Cc: davem, edumazet, pabeni, netdev, linux-rdma, rds-devel,
	linux-kernel, xu.panda, yang.yang29

From: Xu Panda <xu.panda@zte.com.cn>

The implementation of strscpy() is more robust and safer.
That's now the recommended way to copy NUL-terminated strings.

Signed-off-by: Xu Panda <xu.panda@zte.com.cn>
Signed-off-by: Yang Yang <yang.yang29@zte.com.cn>
---
change for v2
 - Use the returns of strscpy to make the copy and the preceding 
BUG_ON() together.Thanks to Jakub Kicinski. 
---
 net/rds/stats.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/net/rds/stats.c b/net/rds/stats.c
index 9e87da43c004..7018c67418f5 100644
--- a/net/rds/stats.c
+++ b/net/rds/stats.c
@@ -88,9 +88,7 @@ void rds_stats_info_copy(struct rds_info_iterator *iter,
 	size_t i;

 	for (i = 0; i < nr; i++) {
-		BUG_ON(strlen(names[i]) >= sizeof(ctr.name));
-		strncpy(ctr.name, names[i], sizeof(ctr.name) - 1);
-		ctr.name[sizeof(ctr.name) - 1] = '\0';
+		BUG_ON(strscpy(ctr.name, names[i], sizeof(ctr.name)) < 0);
 		ctr.value = values[i];

 		rds_info_copy(iter, &ctr, sizeof(ctr));
-- 
2.15.2

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next v2] net/rds: use strscpy() to instead of strncpy()
  2023-01-11  6:25 [PATCH net-next v2] net/rds: use strscpy() to instead of strncpy() yang.yang29
@ 2023-01-13  5:17 ` Jakub Kicinski
  2023-01-13  7:13   ` yang.yang29
  0 siblings, 1 reply; 4+ messages in thread
From: Jakub Kicinski @ 2023-01-13  5:17 UTC (permalink / raw)
  To: yang.yang29
  Cc: santosh.shilimkar, davem, edumazet, pabeni, netdev, linux-rdma,
	rds-devel, linux-kernel, xu.panda

On Wed, 11 Jan 2023 14:25:48 +0800 (CST) yang.yang29@zte.com.cn wrote:
> From: Xu Panda <xu.panda@zte.com.cn>
> 
> The implementation of strscpy() is more robust and safer.
> That's now the recommended way to copy NUL-terminated strings.

What are the differences in behavior between strncpy() and strscpy()?

> diff --git a/net/rds/stats.c b/net/rds/stats.c
> index 9e87da43c004..7018c67418f5 100644
> --- a/net/rds/stats.c
> +++ b/net/rds/stats.c
> @@ -88,9 +88,7 @@ void rds_stats_info_copy(struct rds_info_iterator *iter,
>  	size_t i;
> 
>  	for (i = 0; i < nr; i++) {
> -		BUG_ON(strlen(names[i]) >= sizeof(ctr.name));
> -		strncpy(ctr.name, names[i], sizeof(ctr.name) - 1);
> -		ctr.name[sizeof(ctr.name) - 1] = '\0';
> +		BUG_ON(strscpy(ctr.name, names[i], sizeof(ctr.name)) < 0);
>  		ctr.value = values[i];
> 
>  		rds_info_copy(iter, &ctr, sizeof(ctr));


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next v2] net/rds: use strscpy() to instead of strncpy()
  2023-01-13  5:17 ` Jakub Kicinski
@ 2023-01-13  7:13   ` yang.yang29
  2023-01-13 19:28     ` Jakub Kicinski
  0 siblings, 1 reply; 4+ messages in thread
From: yang.yang29 @ 2023-01-13  7:13 UTC (permalink / raw)
  To: kuba
  Cc: santosh.shilimkar, davem, edumazet, pabeni, netdev, linux-rdma,
	rds-devel, linux-kernel, xu.panda

> What are the differences in behavior between strncpy() and strscpy()?

Strscpy() makes the dest string NUL-terminated, and returns more
useful value. While strncpy() can initialize the dest string.

Here we use strscpy() to make dest string NUL-terminated, and use
return value to check src string size and dest string size. This make
the code simpler.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next v2] net/rds: use strscpy() to instead of strncpy()
  2023-01-13  7:13   ` yang.yang29
@ 2023-01-13 19:28     ` Jakub Kicinski
  0 siblings, 0 replies; 4+ messages in thread
From: Jakub Kicinski @ 2023-01-13 19:28 UTC (permalink / raw)
  To: yang.yang29
  Cc: santosh.shilimkar, davem, edumazet, pabeni, netdev, linux-rdma,
	rds-devel, linux-kernel, xu.panda

On Fri, 13 Jan 2023 15:13:12 +0800 (CST) yang.yang29@zte.com.cn wrote:
> > What are the differences in behavior between strncpy() and strscpy()?  
> 
> Strscpy() makes the dest string NUL-terminated, and returns more
> useful value. While strncpy() can initialize the dest string.
> 
> Here we use strscpy() to make dest string NUL-terminated, and use
> return value to check src string size and dest string size. This make
> the code simpler.

I'm not sure whether in this particular case the output needs 
to be padded or not. And I'm not sure you understand what the
implications are.

The code is fine as is, and I don't trust that you know what 
you're doing. So please don't send any more strncpy() -> strscpy()
conversions for networking.

If you want to do something useful please start with adding a check 
to checkpatch to warn people against using strncpy() and suggest using
strscpy() instead.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-01-13 19:28 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-11  6:25 [PATCH net-next v2] net/rds: use strscpy() to instead of strncpy() yang.yang29
2023-01-13  5:17 ` Jakub Kicinski
2023-01-13  7:13   ` yang.yang29
2023-01-13 19:28     ` Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).