graph: replace strtok with strtok_r
PATCH 1/1 graph: replace strtok with strtok_r
The function strtok is not thread safe, better to use strtok_r. This patch was found by running semgrep on the DPDK repository.
--- app/graph/graph.c | 6 +++--- app/graph/utils.c | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-)
app/graph/graph.c +3 -3
@@ -103,9 +103,9 @@ parser_usecases_read(char *usecases) {bool valid = false;uint32_t i, j =0 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (usecases,"," ); + token =strtok_r (usecases,"," , &saveptr);while (token !=NULL ) {for (i =0 ; i <RTE_DIM (supported_usecases); i++) {if (strcmp (supported_usecases[i], token) ==0 ) {
@@ -116,7 +116,7 @@ parser_usecases_read(char *usecases)break ; } } - token =strtok (NULL ,"," ); + token =strtok_r (NULL ,"," , &saveptr); }return valid;
app/graph/utils.c +9 -9
@@ -95,12 +95,12 @@ parser_ip4_read(uint32_t *value, char *p) {uint8_t shift =24 ;uint32_t ip =0 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (p,"." ); + token =strtok_r (p,"." , &saveptr);while (token !=NULL ) { ip |= (((uint32_t )strtoul (token,NULL ,10 )) << shift); - token =strtok (NULL ,"." ); + token =strtok_r (NULL ,"." , &saveptr); shift -=8 ; }
@@ -113,13 +113,13 @@ int parser_ip6_read(uint8_t *value, char *p) {uint64_t val =0 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (p,":" ); + token =strtok_r (p,":" , &saveptr);while (token !=NULL ) {hex_string_to_uint64 (&val, token); *value = val; - token =strtok (NULL ,":" ); + token =strtok_r (NULL ,":" , &saveptr); value++; val =0 ; }
@@ -132,13 +132,13 @@ parser_mac_read(uint64_t *value, char *p) {uint64_t mac =0 , val =0 ;uint8_t shift =40 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (p,":" ); + token =strtok_r (p,":" , &saveptr);while (token !=NULL ) {hex_string_to_uint64 (&val, token); mac |= val << shift; - token =strtok (NULL ,":" ); + token =strtok_r (NULL ,":" , &saveptr); shift -=8 ; val =0 ; }
Signature · 1 line
2.45.2
There are many strtok invoking in DPDK current, and Hai Jie already submitted a patchset [1], and it seemed interrupted. Perhaps it's time to re-submit.
[1] https://inbox.dpdk.org/dev/[email protected]/
Quoted 88 lines · Stephen Hemminger
The function strtok is not thread safe, better to use
strtok_r. This patch was found by running semgrep on the DPDK repository.Signed-off-by Stephen Hemminger <[email protected]>--- app/graph/graph.c | 6 +++--- app/graph/utils.c | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-)app/graph/graph.c +3
-3@@ -103,9 +103,9 @@ parser_usecases_read(char *usecases) {bool valid = false;uint32_t i, j =0 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (usecases,"," ); + token =strtok_r (usecases,"," , &saveptr);while (token !=NULL ) {for (i =0 ; i <RTE_DIM (supported_usecases); i++) {if (strcmp (supported_usecases[i], token) ==0 ) {@@ -116,7 +116,7 @@ parser_usecases_read(char *usecases)break ; } } - token =strtok (NULL ,"," ); + token =strtok_r (NULL ,"," , &saveptr); }return valid;app/graph/utils.c +9
-9@@ -95,12 +95,12 @@ parser_ip4_read(uint32_t *value, char *p) {uint8_t shift =24 ;uint32_t ip =0 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (p,"." ); + token =strtok_r (p,"." , &saveptr);while (token !=NULL ) { ip |= (((uint32_t )strtoul (token,NULL ,10 )) << shift); - token =strtok (NULL ,"." ); + token =strtok_r (NULL ,"." , &saveptr); shift -=8 ; }@@ -113,13 +113,13 @@ int parser_ip6_read(uint8_t *value, char *p) {uint64_t val =0 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (p,":" ); + token =strtok_r (p,":" , &saveptr);while (token !=NULL ) {hex_string_to_uint64 (&val, token); *value = val; - token =strtok (NULL ,":" ); + token =strtok_r (NULL ,":" , &saveptr); value++; val =0 ; }@@ -132,13 +132,13 @@ parser_mac_read(uint64_t *value, char *p) {uint64_t mac =0 , val =0 ;uint8_t shift =40 ; -char *token; +char *token, *saveptr =NULL ; - token =strtok (p,":" ); + token =strtok_r (p,":" , &saveptr);while (token !=NULL ) {hex_string_to_uint64 (&val, token); mac |= val << shift; - token =strtok (NULL ,":" ); + token =strtok_r (NULL ,":" , &saveptr); shift -=8 ; val =0 ; }
Thomas Monjalon
Applied12/09/2024 03:29, fengchengwen:
Quoted 6 lines · Stephen Hemminger
Quoted 4 lines
The function strtok is not thread safe, better to use
strtok_r. This patch was found by running semgrep on the DPDK repository.Signed-off-by Stephen Hemminger <[email protected]>Acked-by Chengwen Feng <[email protected]>
Applied, thanks.
Quoted 4 lines
There are many strtok invoking in DPDK current, and Hai Jie already submitted a patchset [1], and it seemed interrupted. Perhaps it's time to re-submit.
Waiting for a v6