Acked-by: Chengwen Feng <fengcheng...@huawei.com> 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/20231114110006.91148-1-haij...@huawei.com/ On 2024/9/12 8:55, Stephen Hemminger wrote: > 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 <step...@networkplumber.org> > --- > app/graph/graph.c | 6 +++--- > app/graph/utils.c | 18 +++++++++--------- > 2 files changed, 12 insertions(+), 12 deletions(-) > > diff --git a/app/graph/graph.c b/app/graph/graph.c > index 17717738d7..3af031cbaf 100644 > --- a/app/graph/graph.c > +++ b/app/graph/graph.c > @@ -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; > diff --git a/app/graph/utils.c b/app/graph/utils.c > index 3e8099ea88..5b1f865dd8 100644 > --- a/app/graph/utils.c > +++ b/app/graph/utils.c > @@ -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; > }