[dpdk-dev] [PATCH v4 03/17] eal: fix wrong strnlen() return value in 32bit icc
Liang, Cunming
cunming.liang at intel.com
Mon Feb 9 12:57:11 CET 2015
> -----Original Message-----
> From: Olivier MATZ [mailto:olivier.matz at 6wind.com]
> Sent: Monday, February 09, 2015 4:00 AM
> To: Liang, Cunming; dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v4 03/17] eal: fix wrong strnlen() return value in
> 32bit icc
>
> Hi,
>
> On 02/02/2015 03:02 AM, Cunming Liang wrote:
> > The problem is that strnlen() here may return invalid value with 32bit icc.
> > (actually it returns it’s second parameter,e.g: sysconf(_SC_ARG_MAX)).
> > It starts to manifest hwen max_len parameter is > 2M and using icc –m32 –O2
> (or above).
> >
> > Suggested-by: Konstantin Ananyev <konstantin.ananyev at intel.com>
> > Signed-off-by: Cunming Liang <cunming.liang at intel.com>
> > ---
> > lib/librte_eal/common/eal_common_options.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/librte_eal/common/eal_common_options.c
> b/lib/librte_eal/common/eal_common_options.c
> > index 29ebb6f..22d5d37 100644
> > --- a/lib/librte_eal/common/eal_common_options.c
> > +++ b/lib/librte_eal/common/eal_common_options.c
> > @@ -227,7 +227,7 @@ eal_parse_corelist(const char *corelist)
> > /* Remove all blank characters ahead and after */
> > while (isblank(*corelist))
> > corelist++;
> > - i = strnlen(corelist, sysconf(_SC_ARG_MAX));
> > + i = strnlen(corelist, PATH_MAX);
> > while ((i > 0) && isblank(corelist[i - 1]))
> > i--;
> >
> > @@ -469,7 +469,7 @@ eal_parse_lcores(const char *lcores)
> > /* Remove all blank characters ahead and after */
> > while (isblank(*lcores))
> > lcores++;
> > - i = strnlen(lcores, sysconf(_SC_ARG_MAX));
> > + i = strnlen(lcores, PATH_MAX);
> > while ((i > 0) && isblank(lcores[i - 1]))
> > i--;
> >
> >
>
> I think PATH_MAX is not equivalent to _SC_ARG_MAX.
>
> But the main question is: why do we need to use strnlen() here instead
> of strlen? We can expect that argv[] pointers are always nul-terminated.
> Replacing them by strlen() would probably also solve the icc issue.
[LCM] You're right, here strlen() also solve icc issue and no risk for argv[].
But follows practice suggestion, keeping using those with 'n' function in DPDK is not bad.
There's additional two reason to keep strnlen and PATH_MAX.
1. PATH_MAX is defined as 4096 which is enough as our input. It doesn't matter to be _SC_ARG_MAX or not.
2. strnlen and PATH_MAX already used in eal_parse_coremask, to keep the style consistent in '-l' and '--lcores'.
>
> Regards,
> Olivier
More information about the dev
mailing list