> From: Dengdui Huang [mailto:huangdeng...@huawei.com]
> Sent: Thursday, 27 March 2025 10.01
> 
> The worker_id may come from user input.
> So it is necessary to verify it.
> 
> Fixes: a95d70547c57 ("eal: factorize lcore main loop")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Dengdui Huang <huangdeng...@huawei.com>
> ---
>  lib/eal/common/eal_common_launch.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/lib/eal/common/eal_common_launch.c
> b/lib/eal/common/eal_common_launch.c
> index 5320c3bd3c..76313d5cdf 100644
> --- a/lib/eal/common/eal_common_launch.c
> +++ b/lib/eal/common/eal_common_launch.c
> @@ -35,6 +35,9 @@ rte_eal_remote_launch(lcore_function_t *f, void *arg,
> unsigned int worker_id)
>  {
>       int rc = -EBUSY;
> 

Also check the lcore_id:
+       if (unlikely(lcore_id >= RTE_MAX_LCORE))
+               return -EINVAL;
+

> +     if (!rte_lcore_has_role(worker_id, ROLE_RTE))
> +             return -EINVAL;
> +

Although rte_lcore_has_role() checks the lcore_id and returns -EINVAL if 
invalid, "if (!-EINVAL))" will not take the branch to return -EINVAL here. So 
this check alone does not suffice. You could change it to "if 
(rte_lcore_has_role(worker_id, ROLE_RTE) <= 0) return -EINVAL;".
However, I prefer the separate lcore_id check, as mentioned above, rather than 
changing this check.

>       /* Check if the worker is in 'WAIT' state. Use acquire order
>        * since 'state' variable is used as the guard variable.
>        */
> --
> 2.33.0

<feature creep>
While you are at it, please also add "if (unlikely(lcore_id >= RTE_MAX_LCORE)) 
return -EINVAL;" checks in the other functions in eal_common_lcore.c where 
lcore_id comes from user input and the check is missing.
</feature creep>

Reply via email to