> -----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