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 6A8F143332; Wed, 15 Nov 2023 04:02:50 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 11231402C3; Wed, 15 Nov 2023 04:02:50 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id ACFD44027B for ; Wed, 15 Nov 2023 04:02:48 +0100 (CET) Received: from dggpeml100024.china.huawei.com (unknown [172.30.72.56]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4SVSXM0Lr7zMmxr; Wed, 15 Nov 2023 10:58:11 +0800 (CST) Received: from [10.67.121.161] (10.67.121.161) by dggpeml100024.china.huawei.com (7.185.36.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Wed, 15 Nov 2023 11:02:46 +0800 Subject: Re: [PATCH 00/21] replace strtok with strtok_r To: Tyler Retzlaff , Jie Hai CC: , References: <20231113104550.2138654-1-haijie1@huawei.com> <20231113170928.GD13153@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> <20231114173248.GA23774@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> <20231114173433.GB23774@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> <20231114174916.GD23774@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> From: fengchengwen Message-ID: <1e636881-c543-b23b-4f75-499b175db058@huawei.com> Date: Wed, 15 Nov 2023 11:02:46 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 In-Reply-To: <20231114174916.GD23774@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.121.161] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To dggpeml100024.china.huawei.com (7.185.36.115) X-CFilter-Loop: Reflected 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 On 2023/11/15 1:49, Tyler Retzlaff wrote: > On Tue, Nov 14, 2023 at 09:34:33AM -0800, Tyler Retzlaff wrote: >> On Tue, Nov 14, 2023 at 09:32:48AM -0800, Tyler Retzlaff wrote: >>> On Tue, Nov 14, 2023 at 08:50:17PM +0800, Jie Hai wrote: >>>> On 2023/11/14 1:09, Tyler Retzlaff wrote: >>>>> On Mon, Nov 13, 2023 at 06:45:29PM +0800, Jie Hai wrote: >>>>>> 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 function. >>>>> >>>>> could you please use strtok_s instead of strtok_r the former is part of >>>>> the C11 standard the latter is not. >>>>> >>>>> thanks! >>>>> >>>> Hi, Tyler Retzlaff >>>> >>>> Thanks for your comment. >>>> >>>> For the use of strtok_s, I have consulted some documents, see >>>> https://en.cppreference.com/w/c/string/byte/strtok >>>> It says >>>> "As with all bounds-checked functions, strtok_s only guaranteed to be >>>> available if __STDC_LIB_EXT1__ is defined by the implementation and if >>>> the user defines __STDC_WANT_LIB_EXT1__ to the integer constant 1 before >>>> including . >>>> " >>>> >>>> I use strtok_s with "#ifdef __STDC_LIB_EXT1__ ... #endif" around and >>>> compiled >>>> locally and found that __STDC_LIB_EXT1__ was not defined, so the related >>>> code was not called. I'm afraid there's a problem with this >>>> modification. >>>> >>>> Am I using strtok_s wrong? >>> >>> no i overlooked that it is optional my fault sorry. >>> >>> since there is no portable strtok_r i'm going to have to agree with others >>> that only places where you actually need reentrant strtok be converted to >>> strtok_r. >>> >>> for windows i think we'll either need to introduce an abstracted strtok_r >>> name for portability or something in the rte_ namespace (dependent on >>> what other revieweres would prefer) >> >> just as a follow up here maybe it would be optimal if we could use >> strtok_s *if* we test that the toolchain makes it available and if not >> provide a mapping of strtok_s -> strtok_r. > > just a final follow up, i can see that we already have a rte_strerror > here to do the replace with reentrant dance. it is probably good to > follow the already established pattern for this and have a rte_strtok. +1 for have rte_strtok which could cover different platform. > > what do others think? > >>> >>> thanks! >>> >>>> >>>> Thanks, >>>> Jie Hai >>>>>> >>>>>> Jie Hai (21): >>>>>> app/graph: replace strtok with strtok_r >>>>>> app/test-bbdev: replace strtok with strtok_r >>>>>> app/test-compress-perf: replace strtok with strtok_r >>>>>> app/test-crypto-perf: replace strtok with strtok_r >>>>>> app/test-dma-perf: replace strtok with strtok_r >>>>>> app/test-fib: replace strtok with strtok_r >>>>>> app/dpdk-test-flow-perf: replace strtok with strtok_r >>>>>> app/test-mldev: replace strtok with strtok_r >>>>>> lib/dmadev: replace strtok with strtok_r >>>>>> lib/eal: replace strtok with strtok_r >>>>>> lib/ethdev: replace strtok with strtok_r >>>>>> lib/eventdev: replace strtok with strtok_r >>>>>> lib/telemetry: replace strtok with strtok_r >>>>>> lib/telemetry: replace strtok with strtok_r >>>>>> bus/fslmc: replace strtok with strtok_r >>>>>> common/cnxk: replace strtok with strtok_r >>>>>> event/cnxk: replace strtok with strtok_r >>>>>> net/ark: replace strtok with strtok_r >>>>>> raw/cnxk_gpio: replace strtok with strtok_r >>>>>> examples/l2fwd-crypto: replace strtok with strtok_r >>>>>> examples/vhost: replace strtok with strtok_r >>>>>> >>>>>> app/graph/graph.c | 5 ++- >>>>>> app/graph/utils.c | 15 +++++--- >>>>>> app/test-bbdev/test_bbdev_vector.c | 25 +++++++----- >>>>>> .../comp_perf_options_parse.c | 16 ++++---- >>>>>> app/test-crypto-perf/cperf_options_parsing.c | 16 ++++---- >>>>>> .../cperf_test_vector_parsing.c | 10 +++-- >>>>>> app/test-dma-perf/main.c | 13 ++++--- >>>>>> app/test-fib/main.c | 10 ++--- >>>>>> app/test-flow-perf/main.c | 22 ++++++----- >>>>>> app/test-mldev/ml_options.c | 18 ++++----- >>>>>> drivers/bus/fslmc/fslmc_bus.c | 5 ++- >>>>>> drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 4 +- >>>>>> drivers/common/cnxk/cnxk_telemetry_nix.c | 12 +++--- >>>>>> drivers/event/cnxk/cnxk_eventdev.c | 10 +++-- >>>>>> drivers/event/cnxk/cnxk_tim_evdev.c | 11 +++--- >>>>>> drivers/net/ark/ark_pktchkr.c | 10 ++--- >>>>>> drivers/net/ark/ark_pktgen.c | 10 ++--- >>>>>> drivers/raw/cnxk_gpio/cnxk_gpio.c | 6 +-- >>>>>> examples/l2fwd-crypto/main.c | 6 +-- >>>>>> examples/vhost/main.c | 3 +- >>>>>> lib/dmadev/rte_dmadev.c | 4 +- >>>>>> lib/eal/common/eal_common_memory.c | 8 ++-- >>>>>> lib/ethdev/rte_ethdev_telemetry.c | 6 ++- >>>>>> lib/eventdev/rte_event_eth_rx_adapter.c | 38 +++++++++---------- >>>>>> lib/eventdev/rte_eventdev.c | 18 ++++----- >>>>>> lib/security/rte_security.c | 3 +- >>>>>> lib/telemetry/telemetry.c | 5 ++- >>>>>> 27 files changed, 169 insertions(+), 140 deletions(-) >>>>>> >>>>>> -- >>>>>> 2.30.0 >>>>> . > . >