From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7A87145923; Thu, 12 Sep 2024 03:29:54 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 21A714027D; Thu, 12 Sep 2024 03:29:54 +0200 (CEST) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id BE42540267 for ; Thu, 12 Sep 2024 03:29:50 +0200 (CEST) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4X40Dc6R7dzmYwX; Thu, 12 Sep 2024 09:27:44 +0800 (CST) Received: from dggpeml500024.china.huawei.com (unknown [7.185.36.10]) by mail.maildlp.com (Postfix) with ESMTPS id 1DD8A140390; Thu, 12 Sep 2024 09:29:49 +0800 (CST) Received: from [10.67.121.161] (10.67.121.161) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Thu, 12 Sep 2024 09:29:48 +0800 Message-ID: Date: Thu, 12 Sep 2024 09:29:48 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] graph: replace strtok with strtok_r To: Stephen Hemminger , CC: Sunil Kumar Kori , Rakesh Kudurumalla References: <20240912005602.71815-1-stephen@networkplumber.org> Content-Language: en-US From: fengchengwen In-Reply-To: <20240912005602.71815-1-stephen@networkplumber.org> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.121.161] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To dggpeml500024.china.huawei.com (7.185.36.10) X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Acked-by: Chengwen Feng 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-haijie1@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 > --- > 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; > }