eal: save error in string copy

Message ID 20210611224907.1904-1-xuemingl@nvidia.com (mailing list archive)
State Superseded, archived
Headers
Series eal: save error in string copy |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot success github build: passed
ci/iol-abi-testing success Testing PASS
ci/iol-testing success Testing PASS
ci/iol-mellanox-Functional fail Functional Testing issues
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS

Commit Message

Xueming Li June 11, 2021, 10:49 p.m. UTC
  From: Thomas Monjalon <thomas@monjalon.net>

Sets rte_errrno if the destination buffer is too small.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 lib/eal/common/eal_common_string_fns.c |  4 +++-
 lib/eal/common/eal_common_trace.c      |  1 -
 lib/eal/include/rte_string_fns.h       |  5 ++---
 lib/graph/node.c                       | 12 +++---------
 4 files changed, 8 insertions(+), 14 deletions(-)
  

Comments

Thomas Monjalon June 12, 2021, 8:34 a.m. UTC | #1
12/06/2021 00:49, Xueming Li:
> From: Thomas Monjalon <thomas@monjalon.net>
> 
> Sets rte_errrno if the destination buffer is too small.

Would be good to mention the function name,
and the reason for the change.

> 
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>

You did half of the patch, so you should add your Signed-off.

> ---
>  lib/eal/common/eal_common_string_fns.c |  4 +++-
>  lib/eal/common/eal_common_trace.c      |  1 -
>  lib/eal/include/rte_string_fns.h       |  5 ++---
>  lib/graph/node.c                       | 12 +++---------
>  4 files changed, 8 insertions(+), 14 deletions(-)

Did you check all occurences of rte_strcpy?
  
Xueming Li June 12, 2021, 11:06 p.m. UTC | #2
> -----Original Message-----
> From: Thomas Monjalon <thomas@monjalon.net>
> Sent: Saturday, June 12, 2021 4:35 PM
> To: Xueming(Steven) Li <xuemingl@nvidia.com>
> Cc: dev@dpdk.org; Jerin Jacob <jerinj@marvell.com>; Sunil Kumar Kori <skori@marvell.com>; Kiran Kumar K
> <kirankumark@marvell.com>; Nithin Dabilpuram <ndabilpuram@marvell.com>; david.marchand@redhat.com
> Subject: Re: [PATCH] eal: save error in string copy
> 
> 12/06/2021 00:49, Xueming Li:
> > From: Thomas Monjalon <thomas@monjalon.net>
> >
> > Sets rte_errrno if the destination buffer is too small.
> 
> Would be good to mention the function name, and the reason for the change.
> 
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> 
> You did half of the patch, so you should add your Signed-off.
> 
> > ---
> >  lib/eal/common/eal_common_string_fns.c |  4 +++-
> >  lib/eal/common/eal_common_trace.c      |  1 -
> >  lib/eal/include/rte_string_fns.h       |  5 ++---
> >  lib/graph/node.c                       | 12 +++---------
> >  4 files changed, 8 insertions(+), 14 deletions(-)
> 
> Did you check all occurences of rte_strcpy?

Yes, looks not too much to modify.
  

Patch

diff --git a/lib/eal/common/eal_common_string_fns.c b/lib/eal/common/eal_common_string_fns.c
index 60c5dd66f9..ddd1891656 100644
--- a/lib/eal/common/eal_common_string_fns.c
+++ b/lib/eal/common/eal_common_string_fns.c
@@ -8,6 +8,7 @@ 
 #include <errno.h>
 
 #include <rte_string_fns.h>
+#include <rte_errno.h>
 
 /* split string into tokens */
 int
@@ -62,5 +63,6 @@  rte_strscpy(char *dst, const char *src, size_t dsize)
 	/* Not enough room in dst, set NUL and return error. */
 	if (res != 0)
 		dst[res - 1] = '\0';
-	return -E2BIG;
+	rte_errno = E2BIG;
+	return -rte_errno;
 }
diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c
index 24e27387b1..7bff1cd2ce 100644
--- a/lib/eal/common/eal_common_trace.c
+++ b/lib/eal/common/eal_common_trace.c
@@ -500,7 +500,6 @@  __rte_trace_point_register(rte_trace_point_t *handle, const char *name,
 	/* Initialize the trace point */
 	if (rte_strscpy(tp->name, name, TRACE_POINT_NAME_SIZE) < 0) {
 		trace_err("name is too long");
-		rte_errno = E2BIG;
 		goto free;
 	}
 
diff --git a/lib/eal/include/rte_string_fns.h b/lib/eal/include/rte_string_fns.h
index 8bac8243c9..bb43b2cba3 100644
--- a/lib/eal/include/rte_string_fns.h
+++ b/lib/eal/include/rte_string_fns.h
@@ -97,8 +97,6 @@  rte_strlcat(char *dst, const char *src, size_t size)
  * Copy string src to buffer dst of size dsize.
  * At most dsize-1 chars will be copied.
  * Always NUL-terminates, unless (dsize == 0).
- * Returns number of bytes copied (terminating NUL-byte excluded) on success ;
- * negative errno on error.
  *
  * @param dst
  *   The destination string.
@@ -110,8 +108,9 @@  rte_strlcat(char *dst, const char *src, size_t size)
  *   Length in bytes of the destination buffer.
  *
  * @return
- *   The number of bytes copied on success
+ *   The number of bytes copied (terminating NUL-byte excluded) on success.
  *   -E2BIG if the destination buffer is too small.
+ *   rte_errno is set.
  */
 ssize_t
 rte_strscpy(char *dst, const char *src, size_t dsize);
diff --git a/lib/graph/node.c b/lib/graph/node.c
index 873c9ab16d..86ec4316f9 100644
--- a/lib/graph/node.c
+++ b/lib/graph/node.c
@@ -86,10 +86,8 @@  __rte_node_register(const struct rte_node_register *reg)
 	}
 
 	/* Initialize the node */
-	if (rte_strscpy(node->name, reg->name, RTE_NODE_NAMESIZE) < 0) {
-		rte_errno = E2BIG;
+	if (rte_strscpy(node->name, reg->name, RTE_NODE_NAMESIZE) < 0)
 		goto free;
-	}
 	node->flags = reg->flags;
 	node->process = reg->process;
 	node->init = reg->init;
@@ -98,10 +96,8 @@  __rte_node_register(const struct rte_node_register *reg)
 	node->parent_id = reg->parent_id;
 	for (i = 0; i < reg->nb_edges; i++) {
 		if (rte_strscpy(node->next_nodes[i], reg->next_nodes[i],
-				RTE_NODE_NAMESIZE) < 0) {
-			rte_errno = E2BIG;
+				RTE_NODE_NAMESIZE) < 0)
 			goto free;
-		}
 	}
 
 	node->id = node_id++;
@@ -278,10 +274,8 @@  edge_update(struct node *node, struct node *prev, rte_edge_t from,
 	/* Update the new nodes name */
 	for (i = from; i < max_edges; i++, count++) {
 		if (rte_strscpy(node->next_nodes[i], next_nodes[count],
-				RTE_NODE_NAMESIZE) < 0) {
-			rte_errno = E2BIG;
+				RTE_NODE_NAMESIZE) < 0)
 			goto restore;
-		}
 	}
 restore:
 	/* Update the linked list to point new node address in prev node */