[PATCH 15/21] bus/fslmc: replace strtok with strtok_r

Sachin Saxena sachin.saxena at nxp.com
Wed Nov 15 03:41:15 CET 2023


Acked-by: Sachin Saxena <sachin.saxena at nxp.com>

> -----Original Message-----
> From: Jie Hai <haijie1 at huawei.com>
> Sent: 13 November 2023 04:16 PM
> To: dev at dpdk.org; Hemant Agrawal <hemant.agrawal at nxp.com>; Sachin
> Saxena <sachin.saxena at nxp.com>
> Cc: haijie1 at huawei.com; lihuisong at huawei.com; fengchengwen at huawei.com
> Subject: [PATCH 15/21] bus/fslmc: replace strtok with strtok_r
> 
> 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.
> 
> Signed-off-by: Jie Hai <haijie1 at huawei.com>
> ---
>  drivers/bus/fslmc/fslmc_bus.c            | 5 +++--
>  drivers/bus/fslmc/portal/dpaa2_hw_dpio.c | 4 ++--
>  2 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c
> index 57bfb5111a97..7960ad3979ef 100644
> --- a/drivers/bus/fslmc/fslmc_bus.c
> +++ b/drivers/bus/fslmc/fslmc_bus.c
> @@ -131,6 +131,7 @@ scan_one_fslmc_device(char *dev_name)  {
>  	char *dup_dev_name, *t_ptr;
>  	struct rte_dpaa2_device *dev = NULL;
> +	char *sp = NULL;
>  	int ret = -1;
> 
>  	if (!dev_name)
> @@ -168,7 +169,7 @@ scan_one_fslmc_device(char *dev_name)
>  	}
> 
>  	/* Parse the device name and ID */
> -	t_ptr = strtok(dup_dev_name, ".");
> +	t_ptr = strtok_r(dup_dev_name, ".", &sp);
>  	if (!t_ptr) {
>  		DPAA2_BUS_ERR("Invalid device found: (%s)", dup_dev_name);
>  		ret = -EINVAL;
> @@ -199,7 +200,7 @@ scan_one_fslmc_device(char *dev_name)
>  	else
>  		dev->dev_type = DPAA2_UNKNOWN;
> 
> -	t_ptr = strtok(NULL, ".");
> +	t_ptr = strtok_r(NULL, ".", &sp);
>  	if (!t_ptr) {
>  		DPAA2_BUS_ERR("Skipping invalid device (%s)",
> dup_dev_name);
>  		ret = 0;
> diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
> b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
> index 4aec7b2cd8ba..09a1a2b23787 100644
> --- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
> +++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
> @@ -129,7 +129,7 @@ dpaa2_affine_dpio_intr_to_respective_core(int32_t
> dpio_id, int cpu_id)
>  	uint32_t cpu_mask = 1;
>  	int ret;
>  	size_t len = 0;
> -	char *temp = NULL, *token = NULL;
> +	char *temp = NULL, *token = NULL, *sp = NULL;
>  	char string[STRING_LEN], command[COMMAND_LEN];
>  	FILE *file;
> 
> @@ -141,7 +141,7 @@ dpaa2_affine_dpio_intr_to_respective_core(int32_t
> dpio_id, int cpu_id)
>  	}
>  	while (getline(&temp, &len, file) != -1) {
>  		if ((strstr(temp, string)) != NULL) {
> -			token = strtok(temp, ":");
> +			token = strtok_r(temp, ":", &sp);
>  			break;
>  		}
>  	}
> --
> 2.30.0



More information about the dev mailing list