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 58F8745CA6; Fri, 8 Nov 2024 12:15:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 78C7F4334B; Fri, 8 Nov 2024 12:15:42 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 4A6AD402ED for ; Fri, 8 Nov 2024 12:15:40 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.112]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4XlGXg1cj5z2Fbpf; Fri, 8 Nov 2024 19:13:55 +0800 (CST) Received: from kwepemf500004.china.huawei.com (unknown [7.202.181.242]) by mail.maildlp.com (Postfix) with ESMTPS id DA3E214022E; Fri, 8 Nov 2024 19:15:38 +0800 (CST) Received: from localhost.localdomain (10.28.79.22) by kwepemf500004.china.huawei.com (7.202.181.242) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 8 Nov 2024 19:15:38 +0800 From: Jie Hai To: , , , Sunil Kumar Kori , Rakesh Kudurumalla , Nithin Dabilpuram , Jerin Jacob CC: , , , Subject: [PATCH v5 01/25] app/graph: replace strtok with reentrant version Date: Fri, 8 Nov 2024 19:03:40 +0800 Message-ID: <20241108110404.18317-2-haijie1@huawei.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20241108110404.18317-1-haijie1@huawei.com> References: <20231113104550.2138654-1-haijie1@huawei.com> <20241108110404.18317-1-haijie1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.28.79.22] X-ClientProxiedBy: dggems703-chm.china.huawei.com (10.3.19.180) To kwepemf500004.china.huawei.com (7.202.181.242) 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 Multiple threads calling the same function may cause condition race issues, which often leads to abnormal behavior and can cause more serious vulnerabilities such as abnormal termination, denial of service, and compromised data integrity. The strtok() is non-reentrant, it is better to replace it with a reentrant version. Fixes: 5c59002a34f3 ("app/graph: add graph commands") Fixes: 984a315a5804 ("app/graph: add parser utility") Signed-off-by: Jie Hai Acked-by: Chengwen Feng --- app/graph/graph.c | 6 ++++-- app/graph/utils.c | 16 ++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/graph/graph.c b/app/graph/graph.c index 17717738d7d9..6849b8da5da4 100644 --- a/app/graph/graph.c +++ b/app/graph/graph.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "graph_priv.h" #include "module_api.h" @@ -103,9 +104,10 @@ parser_usecases_read(char *usecases) { bool valid = false; uint32_t i, j = 0; + char *sp = NULL; char *token; - token = strtok(usecases, ","); + token = strtok_r(usecases, ",", &sp); while (token != NULL) { for (i = 0; i < RTE_DIM(supported_usecases); i++) { if (strcmp(supported_usecases[i], token) == 0) { @@ -116,7 +118,7 @@ parser_usecases_read(char *usecases) break; } } - token = strtok(NULL, ","); + token = strtok_r(NULL, ",", &sp); } return valid; diff --git a/app/graph/utils.c b/app/graph/utils.c index 3e8099ea8821..6c53948aa277 100644 --- a/app/graph/utils.c +++ b/app/graph/utils.c @@ -10,6 +10,7 @@ #include #include +#include #include "module_api.h" @@ -94,13 +95,14 @@ int parser_ip4_read(uint32_t *value, char *p) { uint8_t shift = 24; + char *sp = NULL; uint32_t ip = 0; char *token; - token = strtok(p, "."); + token = strtok_r(p, ".", &sp); while (token != NULL) { ip |= (((uint32_t)strtoul(token, NULL, 10)) << shift); - token = strtok(NULL, "."); + token = strtok_r(NULL, ".", &sp); shift -= 8; } @@ -113,13 +115,14 @@ int parser_ip6_read(uint8_t *value, char *p) { uint64_t val = 0; + char *sp = NULL; char *token; - token = strtok(p, ":"); + token = strtok_r(p, ":", &sp); while (token != NULL) { hex_string_to_uint64(&val, token); *value = val; - token = strtok(NULL, ":"); + token = strtok_r(NULL, ":", &sp); value++; val = 0; } @@ -132,13 +135,14 @@ parser_mac_read(uint64_t *value, char *p) { uint64_t mac = 0, val = 0; uint8_t shift = 40; + char *sp = NULL; char *token; - token = strtok(p, ":"); + token = strtok_r(p, ":", &sp); while (token != NULL) { hex_string_to_uint64(&val, token); mac |= val << shift; - token = strtok(NULL, ":"); + token = strtok_r(NULL, ":", &sp); shift -= 8; val = 0; } -- 2.22.0