Hello Hari, On Mon, Jan 7, 2019 at 11:26 AM Hari Kumar Vemula < hari.kumarx.vem...@intel.com> wrote:
> When incorrect core value or range provided, > as part of -l command line option, a crash occurs. > > Added valid range checks to fix the crash. > > Added ut check for negative core values. > Added unit test case for invalid core number range. > > Fixes: d888cb8b9613 ("eal: add core list input format") > Cc: sta...@dpdk.org > > -- > v3: Added unit test cases for invalid core number range > v2: Replace strtoul with strtol > Modified log message > -- > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vem...@intel.com> > --- > lib/librte_eal/common/eal_common_options.c | 9 +++++++-- > test/test/test_eal_flags.c | 14 +++++++++++++- > 2 files changed, 20 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_options.c > b/lib/librte_eal/common/eal_common_options.c > index 6e3a83b98..9431c024e 100644 > --- a/lib/librte_eal/common/eal_common_options.c > +++ b/lib/librte_eal/common/eal_common_options.c > @@ -592,7 +592,9 @@ eal_parse_corelist(const char *corelist) > if (*corelist == '\0') > return -1; > errno = 0; > - idx = strtoul(corelist, &end, 10); > + idx = strtol(corelist, &end, 10); > + if (idx < 0 || idx >= (int)cfg->lcore_count) > + return -1; > if (errno || end == NULL) > return -1; > while (isblank(*end)) > Please fix indentation. > @@ -1103,6 +1105,7 @@ eal_parse_common_option(int opt, const char *optarg, > { > static int b_used; > static int w_used; > + struct rte_config *cfg = rte_eal_get_configuration(); > > switch (opt) { > /* blacklist */ > @@ -1145,7 +1148,9 @@ eal_parse_common_option(int opt, const char *optarg, > /* corelist */ > case 'l': > if (eal_parse_corelist(optarg) < 0) { > - RTE_LOG(ERR, EAL, "invalid core list\n"); > + RTE_LOG(ERR, EAL, > + "Invalid core number, core range should be > (0, %u)\n", > + cfg->lcore_count-1); > return -1; > } > > eal_parse_corelist can error for both invalid core number but also for incorrectly formatted input. How about "invalid core list, please check core numbers are in [0, %u] range" ? diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c > index 2acab9d69..28e68a6c9 100644 > --- a/test/test/test_eal_flags.c > +++ b/test/test/test_eal_flags.c > @@ -513,6 +513,16 @@ test_missing_c_flag(void) > const char *argv25[] = { prgname, prefix, mp_flag, > "-n", "3", "--lcores", > "0-1,2@(5-7),(3-5)@(0,2),(0,6),7"}; > + /* core number is negative value */ > + const char * const argv26[] = { prgname, prefix, mp_flag, > + "-n", "3", "--lcores", "-5" }; > + const char * const argv27[] = { prgname, prefix, mp_flag, > + "-n", "3", "--lcores", "-5-7" }; > + /* core number is maximum value */ > + const char * const argv28[] = { prgname, prefix, mp_flag, > + "-n", "3", "--lcores", "999999999" }; > + const char * const argv29[] = { prgname, prefix, mp_flag, > + "-n", "3", "--lcores", "1-9999999" }; > Well, the maximum value is not really "999999999". Please check against RTE_MAX_LCORE. -- David Marchand