* [dpdk-stable] [PATCH v2] eal: fix core number validation [not found] <yes> @ 2019-01-03 12:28 ` Hari kumar Vemula 2019-01-03 13:03 ` David Marchand ` (3 more replies) 2019-01-04 13:10 ` [dpdk-stable] [PATCH v2] " Hari kumar Vemula ` (2 subsequent siblings) 3 siblings, 4 replies; 26+ messages in thread From: Hari kumar Vemula @ 2019-01-03 12:28 UTC (permalink / raw) To: dev Cc: stable, reshma.pattan, ferruh.yigit, david.marchand, jananeex.m.parthasarathy, Hari kumar Vemula 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. Fixes: d888cb8b9613 ("eal: add core list input format") Cc: stable@dpdk.org -- v2: Replace strtoul with strtol Modified log message -- Signed-off-by: Hari kumar Vemula <hari.kumarx.vemula@intel.com> --- lib/librte_eal/common/eal_common_options.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 6e3a83b98..b24668c23 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -592,7 +592,7 @@ eal_parse_corelist(const char *corelist) if (*corelist == '\0') return -1; errno = 0; - idx = strtoul(corelist, &end, 10); + idx = strtol(corelist, &end, 10); if (errno || end == NULL) return -1; while (isblank(*end)) @@ -603,6 +603,11 @@ eal_parse_corelist(const char *corelist) max = idx; if (min == RTE_MAX_LCORE) min = idx; + if ((unsigned int)idx >= cfg->lcore_count || + (unsigned int)min >= cfg->lcore_count) { + return -1; + } + for (idx = min; idx <= max; idx++) { if (cfg->lcore_role[idx] != ROLE_RTE) { cfg->lcore_role[idx] = ROLE_RTE; @@ -1103,6 +1108,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 +1151,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 given core range should be(0, %u)\n", + cfg->lcore_count-1); return -1; } -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v2] eal: fix core number validation 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula @ 2019-01-03 13:03 ` David Marchand 2019-01-07 7:05 ` Hari Kumar Vemula ` (2 subsequent siblings) 3 siblings, 0 replies; 26+ messages in thread From: David Marchand @ 2019-01-03 13:03 UTC (permalink / raw) To: Hari kumar Vemula Cc: dev, stable, reshma.pattan, Yigit, Ferruh, jananeex.m.parthasarathy On Thu, Jan 3, 2019 at 1:28 PM Hari kumar Vemula < hari.kumarx.vemula@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. > > Fixes: d888cb8b9613 ("eal: add core list input format") > Cc: stable@dpdk.org > > -- > v2: Replace strtoul with strtol > Modified log message > You did not take my other comments into account and the ut updates are missing. -- David Marchand ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v2] eal: fix core number validation 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula 2019-01-03 13:03 ` David Marchand @ 2019-01-07 7:05 ` Hari Kumar Vemula 2019-01-07 10:25 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula 3 siblings, 0 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-07 7:05 UTC (permalink / raw) To: dev Cc: david.marchand, reshma.pattan, ferruh.yigit, jananeex.m.parthasarathy, Hari kumar Vemula, stable From: Hari kumar Vemula <hari.kumarx.vemula@intel.com> 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: stable@dpdk.org Signed-off-by: Hari kumar Vemula <hari.kumarx.vemula@intel.com> --- lib/librte_eal/common/eal_common_options.c | 10 ++++++++-- test/test/test_eal_flags.c | 14 +++++++++++++- 2 files changed, 21 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..4a900c548 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)) @@ -603,6 +605,7 @@ eal_parse_corelist(const char *corelist) max = idx; if (min == RTE_MAX_LCORE) min = idx; for (idx = min; idx <= max; idx++) { if (cfg->lcore_role[idx] != ROLE_RTE) { cfg->lcore_role[idx] = ROLE_RTE; @@ -1103,6 +1106,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 +1149,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; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..ec79b2242 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"}; + /* when 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" }; + /* when 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" }; if (launch_proc(argv2) != 0) { printf("Error - " @@ -556,7 +566,9 @@ test_missing_c_flag(void) launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv23) == 0 || launch_proc(argv24) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0 || launch_proc(argv29) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v3] eal: fix core number validation 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula 2019-01-03 13:03 ` David Marchand 2019-01-07 7:05 ` Hari Kumar Vemula @ 2019-01-07 10:25 ` Hari Kumar Vemula 2019-01-10 10:11 ` David Marchand 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula 3 siblings, 1 reply; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-07 10:25 UTC (permalink / raw) To: dev Cc: david.marchand, reshma.pattan, ferruh.yigit, jananeex.m.parthasarathy, Hari Kumar Vemula, stable 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: stable@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.vemula@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)) @@ -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; } 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" }; if (launch_proc(argv2) != 0) { printf("Error - " @@ -556,7 +566,9 @@ test_missing_c_flag(void) launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv23) == 0 || launch_proc(argv24) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0 || launch_proc(argv29) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v3] eal: fix core number validation 2019-01-07 10:25 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula @ 2019-01-10 10:11 ` David Marchand 0 siblings, 0 replies; 26+ messages in thread From: David Marchand @ 2019-01-10 10:11 UTC (permalink / raw) To: Hari Kumar Vemula Cc: dev, reshma.pattan, Yigit, Ferruh, jananeex.m.parthasarathy, dpdk stable Hello Hari, On Mon, Jan 7, 2019 at 11:26 AM Hari Kumar Vemula < hari.kumarx.vemula@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: stable@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.vemula@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 ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v4] eal: fix core number validation 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula ` (2 preceding siblings ...) 2019-01-07 10:25 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula @ 2019-01-11 14:15 ` Hari Kumar Vemula 2019-01-11 15:06 ` David Marchand ` (4 more replies) 3 siblings, 5 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-11 14:15 UTC (permalink / raw) To: dev Cc: david.marchand, ferruh.yigit, reshma.pattan, jananeex.m.parthasarathy, Hari Kumar Vemula, stable 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: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> -- v4: Used RTE_MAX_LCORE for max core check v3: Added unit test cases for invalid core number range v2: Replace strtoul with strtol Modified log message --- lib/librte_eal/common/eal_common_options.c | 9 +++++++-- test/test/test_eal_flags.c | 15 ++++++++++++++- 2 files changed, 21 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..14f40c62c 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)) @@ -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 list, please check core numbers are in [0, %u] range\n", + cfg->lcore_count-1); return -1; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..fc45bf953 100644 --- a/test/test/test_eal_flags.c +++ b/test/test/test_eal_flags.c @@ -18,6 +18,7 @@ #include <sys/file.h> #include <limits.h> +#include <rte_per_lcore.h> #include <rte_debug.h> #include <rte_string_fns.h> @@ -513,6 +514,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", "RTE_MAX_LCORE+1" }; + const char * const argv29[] = { prgname, prefix, mp_flag, + "-n", "3", "--lcores", "1-(RTE_MAX_LCORE+1)" }; if (launch_proc(argv2) != 0) { printf("Error - " @@ -556,7 +567,9 @@ test_missing_c_flag(void) launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv23) == 0 || launch_proc(argv24) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0 || launch_proc(argv29) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v4] eal: fix core number validation 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula @ 2019-01-11 15:06 ` David Marchand 2019-01-14 10:08 ` [dpdk-stable] [PATCH v5] " Hari Kumar Vemula ` (3 subsequent siblings) 4 siblings, 0 replies; 26+ messages in thread From: David Marchand @ 2019-01-11 15:06 UTC (permalink / raw) To: Hari Kumar Vemula Cc: dev, Yigit, Ferruh, reshma.pattan, jananeex.m.parthasarathy, dpdk stable On Fri, Jan 11, 2019 at 3:15 PM Hari Kumar Vemula < hari.kumarx.vemula@intel.com> wrote: > > diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c > index 2acab9d69..fc45bf953 100644 > --- a/test/test/test_eal_flags.c > +++ b/test/test/test_eal_flags.c > @@ -18,6 +18,7 @@ > #include <sys/file.h> > #include <limits.h> > > +#include <rte_per_lcore.h> > #include <rte_debug.h> > #include <rte_string_fns.h> > > @@ -513,6 +514,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" }; > I did not see this before, but you fixed the "-l" eal option, not "--lcores" option. So those unit tests are wrong. > + /* core number is maximum value */ > + const char * const argv28[] = { prgname, prefix, mp_flag, > + "-n", "3", "--lcores", "RTE_MAX_LCORE+1" }; > + const char * const argv29[] = { prgname, prefix, mp_flag, > + "-n", "3", "--lcores", > "1-(RTE_MAX_LCORE+1)" }; > > if (launch_proc(argv2) != 0) { > printf("Error - " > Passing "RTE_MAX_LCORE+1" is indeed wrong (be it with "-l" or "--lcores" options), but I would still prefer to check the formatted value of RTE_MAX_LCORE (no need for that +1, btw). So please, in next version, test against "-l", RTE_STR(RTE_MAX_LCORE) and "-l", "1-" RTE_STR(RTE_MAX_LCORE). Thanks. -- David Marchand ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v5] eal: fix core number validation 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula 2019-01-11 15:06 ` David Marchand @ 2019-01-14 10:08 ` Hari Kumar Vemula 2019-01-14 10:28 ` Hari Kumar Vemula ` (2 subsequent siblings) 4 siblings, 0 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-14 10:08 UTC (permalink / raw) To: reshma.pattan; +Cc: Hari Kumar Vemula, stable From: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> 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: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> -- v5: corrected unit test case for -l option v4: Used RTE_MAX_LCORE for max core check v3: Added unit test cases for invalid core number range v2: Replace strtoul with strtol Modified log message --- lib/librte_eal/common/eal_common_options.c | 9 +++++++-- test/test/test_eal_flags.c | 15 ++++++++++++++- 2 files changed, 21 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..14f40c62c 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)) @@ -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 list, please check core numbers are in [0, %u] range\n", + cfg->lcore_count-1); return -1; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..4dc22ec36 100644 --- a/test/test/test_eal_flags.c +++ b/test/test/test_eal_flags.c @@ -18,6 +18,7 @@ #include <sys/file.h> #include <limits.h> +#include <rte_per_lcore.h> #include <rte_debug.h> #include <rte_string_fns.h> @@ -513,6 +514,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", "-l", "-5" }; + const char * const argv27[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "-5-7" }; + /* core number is maximum value */ + const char * const argv28[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", RTE_STR(RTE_MAX_LCORE) }; + const char * const argv29[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "1-"RTE_STR(RTE_MAX_LCORE) }; if (launch_proc(argv2) != 0) { printf("Error - " @@ -556,7 +567,9 @@ test_missing_c_flag(void) launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv23) == 0 || launch_proc(argv24) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0 || launch_proc(argv29) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v5] eal: fix core number validation 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula 2019-01-11 15:06 ` David Marchand 2019-01-14 10:08 ` [dpdk-stable] [PATCH v5] " Hari Kumar Vemula @ 2019-01-14 10:28 ` Hari Kumar Vemula 2019-01-14 14:39 ` David Marchand 2019-01-17 10:11 ` [dpdk-stable] [PATCH v6] " Hari Kumar Vemula 2019-01-17 12:13 ` Hari Kumar Vemula 4 siblings, 1 reply; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-14 10:28 UTC (permalink / raw) To: dev Cc: reshma.pattan, david.marchand, ferruh.yigit, Hari Kumar Vemula, stable 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: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> -- v5: corrected unit test case for -l option v4: Used RTE_MAX_LCORE for max core check v3: Added unit test cases for invalid core number range v2: Replace strtoul with strtol Modified log message --- lib/librte_eal/common/eal_common_options.c | 9 +++++++-- test/test/test_eal_flags.c | 15 ++++++++++++++- 2 files changed, 21 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..14f40c62c 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)) @@ -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 list, please check core numbers are in [0, %u] range\n", + cfg->lcore_count-1); return -1; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..4dc22ec36 100644 --- a/test/test/test_eal_flags.c +++ b/test/test/test_eal_flags.c @@ -18,6 +18,7 @@ #include <sys/file.h> #include <limits.h> +#include <rte_per_lcore.h> #include <rte_debug.h> #include <rte_string_fns.h> @@ -513,6 +514,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", "-l", "-5" }; + const char * const argv27[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "-5-7" }; + /* core number is maximum value */ + const char * const argv28[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", RTE_STR(RTE_MAX_LCORE) }; + const char * const argv29[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "1-"RTE_STR(RTE_MAX_LCORE) }; if (launch_proc(argv2) != 0) { printf("Error - " @@ -556,7 +567,9 @@ test_missing_c_flag(void) launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv23) == 0 || launch_proc(argv24) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0 || launch_proc(argv29) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v5] eal: fix core number validation 2019-01-14 10:28 ` Hari Kumar Vemula @ 2019-01-14 14:39 ` David Marchand 0 siblings, 0 replies; 26+ messages in thread From: David Marchand @ 2019-01-14 14:39 UTC (permalink / raw) To: Hari Kumar Vemula; +Cc: dev, reshma.pattan, Yigit, Ferruh, dpdk stable On Mon, Jan 14, 2019 at 11:31 AM Hari Kumar Vemula < hari.kumarx.vemula@intel.com> wrote: > diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c > index 2acab9d69..4dc22ec36 100644 > --- a/test/test/test_eal_flags.c > +++ b/test/test/test_eal_flags.c > @@ -18,6 +18,7 @@ > #include <sys/file.h> > #include <limits.h> > > +#include <rte_per_lcore.h> > #include <rte_debug.h> > #include <rte_string_fns.h> > > @@ -513,6 +514,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", "-l", "-5" }; > + const char * const argv27[] = { prgname, prefix, mp_flag, > + "-n", "3", "-l", "-5-7" }; > + /* core number is maximum value */ > + const char * const argv28[] = { prgname, prefix, mp_flag, > + "-n", "3", "-l", RTE_STR(RTE_MAX_LCORE) }; > + const char * const argv29[] = { prgname, prefix, mp_flag, > + "-n", "3", "-l", > "1-"RTE_STR(RTE_MAX_LCORE) }; > Please move this block with the other "-l" options. You can add my Reviewed-by tag with this. Thanks. -- David Marchand ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v6] eal: fix core number validation 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula ` (2 preceding siblings ...) 2019-01-14 10:28 ` Hari Kumar Vemula @ 2019-01-17 10:11 ` Hari Kumar Vemula 2019-01-17 12:13 ` Hari Kumar Vemula 4 siblings, 0 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-17 10:11 UTC (permalink / raw) To: reshma.pattan; +Cc: jananeex.m.parthasarathy, Hari Kumar Vemula, stable 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: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> Reviewed-by: David Marchand <david.marchand@redhat.com> -- v6: Changed testcase order and added reviewed-by tag v5: Corrected unit test case for -l option v4: Used RTE_MAX_LCORE for max core check v3: Added unit test cases for invalid core number range v2: Replace strtoul with strtol Modified log message --- lib/librte_eal/common/eal_common_options.c | 9 +++- test/test/test_eal_flags.c | 57 ++++++++++++++-------- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 6e3a83b98..14f40c62c 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)) @@ -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 list, please check core numbers are in [0, %u] range\n", + cfg->lcore_count-1); return -1; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..24ca5b6a0 100644 --- a/test/test/test_eal_flags.c +++ b/test/test/test_eal_flags.c @@ -18,6 +18,7 @@ #include <sys/file.h> #include <limits.h> +#include <rte_per_lcore.h> #include <rte_debug.h> #include <rte_string_fns.h> @@ -480,37 +481,47 @@ test_missing_c_flag(void) /* sanity check test - valid corelist value */ const char *argv11[] = { prgname, prefix, mp_flag, "-n", "3", "-l", "1-2,3" }; + /* core number is negative value */ + const char * const argv12[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "-5" }; + const char * const argv13[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "-5-7" }; + /* core number is maximum value */ + const char * const argv14[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", RTE_STR(RTE_MAX_LCORE) }; + const char * const argv15[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "1-"RTE_STR(RTE_MAX_LCORE) }; /* --lcores flag but no lcores value */ - const char *argv12[] = { prgname, prefix, mp_flag, + const char * const argv16[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores" }; - const char *argv13[] = { prgname, prefix, mp_flag, + const char * const argv17[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", " " }; /* bad lcores value */ - const char *argv14[] = { prgname, prefix, mp_flag, + const char * const argv18[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "1-3-5" }; - const char *argv15[] = { prgname, prefix, mp_flag, + const char * const argv19[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "0-1,,2" }; - const char *argv16[] = { prgname, prefix, mp_flag, + const char * const argv20[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "0-,1" }; - const char *argv17[] = { prgname, prefix, mp_flag, + const char * const argv21[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(0-,2-4)" }; - const char *argv18[] = { prgname, prefix, mp_flag, + const char * const argv22[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(-1,2)" }; - const char *argv19[] = { prgname, prefix, mp_flag, + const char * const argv23[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(2-4)@(2-4-6)" }; - const char *argv20[] = { prgname, prefix, mp_flag, + const char * const argv24[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(a,2)" }; - const char *argv21[] = { prgname, prefix, mp_flag, + const char * const argv25[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "1-3@(1,3)" }; - const char *argv22[] = { prgname, prefix, mp_flag, + const char * const argv26[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "3@((1,3)" }; - const char *argv23[] = { prgname, prefix, mp_flag, + const char * const argv27[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(4-7)=(1,3)" }; - const char *argv24[] = { prgname, prefix, mp_flag, + const char * const argv28[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "[4-7]@(1,3)" }; /* sanity check of tests - valid lcores value */ - const char *argv25[] = { prgname, prefix, mp_flag, + const char * const argv29[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "0-1,2@(5-7),(3-5)@(0,2),(0,6),7"}; @@ -538,7 +549,11 @@ test_missing_c_flag(void) || launch_proc(argv7) == 0 || launch_proc(argv8) == 0 || launch_proc(argv9) == 0 - || launch_proc(argv10) == 0) { + || launch_proc(argv10) == 0 + || launch_proc(argv12) == 0 + || launch_proc(argv13) == 0 + || launch_proc(argv14) == 0 + || launch_proc(argv15) == 0) { printf("Error - " "process ran without error with invalid -l flag\n"); return -1; @@ -550,19 +565,19 @@ test_missing_c_flag(void) } /* start --lcores tests */ - if (launch_proc(argv12) == 0 || launch_proc(argv13) == 0 || - launch_proc(argv14) == 0 || launch_proc(argv15) == 0 || - launch_proc(argv16) == 0 || launch_proc(argv17) == 0 || + if (launch_proc(argv16) == 0 || launch_proc(argv17) == 0 || launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || - launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv22) == 0 || launch_proc(argv23) == 0 || + launch_proc(argv24) == 0 || launch_proc(argv25) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; } - if (launch_proc(argv25) != 0) { + if (launch_proc(argv29) != 0) { printf("Error - " "process did not run ok with valid corelist value\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v6] eal: fix core number validation 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula ` (3 preceding siblings ...) 2019-01-17 10:11 ` [dpdk-stable] [PATCH v6] " Hari Kumar Vemula @ 2019-01-17 12:13 ` Hari Kumar Vemula 2019-01-17 12:19 ` [dpdk-stable] [dpdk-dev] " Bruce Richardson ` (2 more replies) 4 siblings, 3 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-17 12:13 UTC (permalink / raw) To: dev Cc: david.marchand, reshma.pattan, ferruh.yigit, jananeex.m.parthasarathy, Hari Kumar Vemula, stable 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: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> Reviewed-by: David Marchand <david.marchand@redhat.com> -- v6: Changed testcase order v5: Corrected unit test case for -l option v4: Used RTE_MAX_LCORE for max core check v3: Added unit test cases for invalid core number range v2: Replace strtoul with strtol Modified log message --- lib/librte_eal/common/eal_common_options.c | 9 +++- test/test/test_eal_flags.c | 61 ++++++++++++++-------- 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 6e3a83b98..14f40c62c 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)) @@ -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 list, please check core numbers are in [0, %u] range\n", + cfg->lcore_count-1); return -1; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..e3a60c7ae 100644 --- a/test/test/test_eal_flags.c +++ b/test/test/test_eal_flags.c @@ -18,6 +18,7 @@ #include <sys/file.h> #include <limits.h> +#include <rte_per_lcore.h> #include <rte_debug.h> #include <rte_string_fns.h> @@ -477,40 +478,50 @@ test_missing_c_flag(void) "-n", "3", "-l", "1," }; const char *argv10[] = { prgname, prefix, mp_flag, "-n", "3", "-l", "1#2" }; + /* core number is negative value */ + const char * const argv11[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "-5" }; + const char * const argv12[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "-5-7" }; + /* core number is maximum value */ + const char * const argv13[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", RTE_STR(RTE_MAX_LCORE) }; + const char * const argv14[] = { prgname, prefix, mp_flag, + "-n", "3", "-l", "1-"RTE_STR(RTE_MAX_LCORE) }; /* sanity check test - valid corelist value */ - const char *argv11[] = { prgname, prefix, mp_flag, + const char * const argv15[] = { prgname, prefix, mp_flag, "-n", "3", "-l", "1-2,3" }; /* --lcores flag but no lcores value */ - const char *argv12[] = { prgname, prefix, mp_flag, + const char * const argv16[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores" }; - const char *argv13[] = { prgname, prefix, mp_flag, + const char * const argv17[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", " " }; /* bad lcores value */ - const char *argv14[] = { prgname, prefix, mp_flag, + const char * const argv18[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "1-3-5" }; - const char *argv15[] = { prgname, prefix, mp_flag, + const char * const argv19[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "0-1,,2" }; - const char *argv16[] = { prgname, prefix, mp_flag, + const char * const argv20[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "0-,1" }; - const char *argv17[] = { prgname, prefix, mp_flag, + const char * const argv21[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(0-,2-4)" }; - const char *argv18[] = { prgname, prefix, mp_flag, + const char * const argv22[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(-1,2)" }; - const char *argv19[] = { prgname, prefix, mp_flag, + const char * const argv23[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(2-4)@(2-4-6)" }; - const char *argv20[] = { prgname, prefix, mp_flag, + const char * const argv24[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(a,2)" }; - const char *argv21[] = { prgname, prefix, mp_flag, + const char * const argv25[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "1-3@(1,3)" }; - const char *argv22[] = { prgname, prefix, mp_flag, + const char * const argv26[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "3@((1,3)" }; - const char *argv23[] = { prgname, prefix, mp_flag, + const char * const argv27[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "(4-7)=(1,3)" }; - const char *argv24[] = { prgname, prefix, mp_flag, + const char * const argv28[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "[4-7]@(1,3)" }; /* sanity check of tests - valid lcores value */ - const char *argv25[] = { prgname, prefix, mp_flag, + const char * const argv29[] = { prgname, prefix, mp_flag, "-n", "3", "--lcores", "0-1,2@(5-7),(3-5)@(0,2),(0,6),7"}; @@ -538,31 +549,35 @@ test_missing_c_flag(void) || launch_proc(argv7) == 0 || launch_proc(argv8) == 0 || launch_proc(argv9) == 0 - || launch_proc(argv10) == 0) { + || launch_proc(argv10) == 0 + || launch_proc(argv11) == 0 + || launch_proc(argv12) == 0 + || launch_proc(argv13) == 0 + || launch_proc(argv14) == 0) { printf("Error - " "process ran without error with invalid -l flag\n"); return -1; } - if (launch_proc(argv11) != 0) { + if (launch_proc(argv15) != 0) { printf("Error - " "process did not run ok with valid corelist value\n"); return -1; } /* start --lcores tests */ - if (launch_proc(argv12) == 0 || launch_proc(argv13) == 0 || - launch_proc(argv14) == 0 || launch_proc(argv15) == 0 || - launch_proc(argv16) == 0 || launch_proc(argv17) == 0 || + if (launch_proc(argv16) == 0 || launch_proc(argv17) == 0 || launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || - launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv22) == 0 || launch_proc(argv23) == 0 || + launch_proc(argv24) == 0 || launch_proc(argv25) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; } - if (launch_proc(argv25) != 0) { + if (launch_proc(argv29) != 0) { printf("Error - " "process did not run ok with valid corelist value\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH v6] eal: fix core number validation 2019-01-17 12:13 ` Hari Kumar Vemula @ 2019-01-17 12:19 ` Bruce Richardson 2019-01-17 12:32 ` David Marchand 2019-01-17 16:29 ` [dpdk-stable] " Thomas Monjalon 2019-01-17 16:31 ` Thomas Monjalon 2 siblings, 1 reply; 26+ messages in thread From: Bruce Richardson @ 2019-01-17 12:19 UTC (permalink / raw) To: Hari Kumar Vemula Cc: dev, david.marchand, reshma.pattan, ferruh.yigit, jananeex.m.parthasarathy, stable On Thu, Jan 17, 2019 at 12:13:12PM +0000, Hari Kumar Vemula 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: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > Reviewed-by: David Marchand <david.marchand@redhat.com> > -- > v6: Changed testcase order > v5: Corrected unit test case for -l option > v4: Used RTE_MAX_LCORE for max core check > v3: Added unit test cases for invalid core number range > v2: Replace strtoul with strtol > Modified log message > --- > lib/librte_eal/common/eal_common_options.c | 9 +++- > test/test/test_eal_flags.c | 61 ++++++++++++++-------- > 2 files changed, 45 insertions(+), 25 deletions(-) > Is this patch related to, or does it fix Bugzilla #19? https://bugs.dpdk.org/show_bug.cgi?id=19 /Bruce ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH v6] eal: fix core number validation 2019-01-17 12:19 ` [dpdk-stable] [dpdk-dev] " Bruce Richardson @ 2019-01-17 12:32 ` David Marchand 0 siblings, 0 replies; 26+ messages in thread From: David Marchand @ 2019-01-17 12:32 UTC (permalink / raw) To: Bruce Richardson Cc: Hari Kumar Vemula, dev, reshma.pattan, Yigit, Ferruh, jananeex.m.parthasarathy, dpdk stable On Thu, Jan 17, 2019 at 1:19 PM Bruce Richardson <bruce.richardson@intel.com> wrote: > On Thu, Jan 17, 2019 at 12:13:12PM +0000, Hari Kumar Vemula 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: stable@dpdk.org > > > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > > Reviewed-by: David Marchand <david.marchand@redhat.com> > > -- > > v6: Changed testcase order > > v5: Corrected unit test case for -l option > > v4: Used RTE_MAX_LCORE for max core check > > v3: Added unit test cases for invalid core number range > > v2: Replace strtoul with strtol > > Modified log message > > --- > > lib/librte_eal/common/eal_common_options.c | 9 +++- > > test/test/test_eal_flags.c | 61 ++++++++++++++-------- > > 2 files changed, 45 insertions(+), 25 deletions(-) > > > Is this patch related to, or does it fix Bugzilla #19? > > https://bugs.dpdk.org/show_bug.cgi?id=19 Separate issue, from my pov. I would say the issue happens with a dpdk process that has no cpu available wrt CONFIG_RTE_MAX_CORES. eal_auto_detect_cores() then removes all cores from cfg->lcore_role[], then eal_adjust_config() an incorrect master lcore is chosen at cfg->master_lcore = rte_get_next_lcore(-1, 0, 0); ? -- David Marchand ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v6] eal: fix core number validation 2019-01-17 12:13 ` Hari Kumar Vemula 2019-01-17 12:19 ` [dpdk-stable] [dpdk-dev] " Bruce Richardson @ 2019-01-17 16:29 ` Thomas Monjalon 2019-01-17 16:31 ` Thomas Monjalon 2 siblings, 0 replies; 26+ messages in thread From: Thomas Monjalon @ 2019-01-17 16:29 UTC (permalink / raw) To: Hari Kumar Vemula Cc: stable, david.marchand, reshma.pattan, ferruh.yigit, jananeex.m.parthasarathy 17/01/2019 13:13, Hari Kumar Vemula: > 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: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > Reviewed-by: David Marchand <david.marchand@redhat.com> Applied, thanks ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v6] eal: fix core number validation 2019-01-17 12:13 ` Hari Kumar Vemula 2019-01-17 12:19 ` [dpdk-stable] [dpdk-dev] " Bruce Richardson 2019-01-17 16:29 ` [dpdk-stable] " Thomas Monjalon @ 2019-01-17 16:31 ` Thomas Monjalon 2 siblings, 0 replies; 26+ messages in thread From: Thomas Monjalon @ 2019-01-17 16:31 UTC (permalink / raw) To: Hari Kumar Vemula Cc: stable, dev, david.marchand, reshma.pattan, ferruh.yigit, jananeex.m.parthasarathy 17/01/2019 13:13, Hari Kumar Vemula: > 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: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > Reviewed-by: David Marchand <david.marchand@redhat.com> Applied, thanks ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v2] eal: fix core number validation [not found] <yes> 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula @ 2019-01-04 13:10 ` Hari kumar Vemula 2019-01-07 13:01 ` [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure Hari Kumar Vemula 2019-01-08 6:18 ` [dpdk-stable] [PATCH] " Hari Kumar Vemula 3 siblings, 0 replies; 26+ messages in thread From: Hari kumar Vemula @ 2019-01-04 13:10 UTC (permalink / raw) To: reshma.pattan; +Cc: jananeex.m.parthasarathy, Hari kumar Vemula, stable 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: stable@dpdk.org Signed-off-by: Hari kumar Vemula <hari.kumarx.vemula@intel.com> --- lib/librte_eal/common/eal_common_options.c | 10 ++++++++-- test/test/test_eal_flags.c | 14 +++++++++++++- 2 files changed, 21 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..4a900c548 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)) @@ -603,6 +605,7 @@ eal_parse_corelist(const char *corelist) max = idx; if (min == RTE_MAX_LCORE) min = idx; + for (idx = min; idx <= max; idx++) { if (cfg->lcore_role[idx] != ROLE_RTE) { cfg->lcore_role[idx] = ROLE_RTE; @@ -1103,6 +1106,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 +1149,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 given core range should be(0, %u)\n", + cfg->lcore_count-1); return -1; } diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 2acab9d69..ec79b2242 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"}; + /* when 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" }; + /* when 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" }; if (launch_proc(argv2) != 0) { printf("Error - " @@ -556,7 +566,9 @@ test_missing_c_flag(void) launch_proc(argv18) == 0 || launch_proc(argv19) == 0 || launch_proc(argv20) == 0 || launch_proc(argv21) == 0 || launch_proc(argv21) == 0 || launch_proc(argv22) == 0 || - launch_proc(argv23) == 0 || launch_proc(argv24) == 0) { + launch_proc(argv23) == 0 || launch_proc(argv24) == 0 || + launch_proc(argv26) == 0 || launch_proc(argv27) == 0 || + launch_proc(argv28) == 0 || launch_proc(argv29) == 0) { printf("Error - " "process ran without error with invalid --lcore flag\n"); return -1; -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure [not found] <yes> 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula 2019-01-04 13:10 ` [dpdk-stable] [PATCH v2] " Hari kumar Vemula @ 2019-01-07 13:01 ` Hari Kumar Vemula 2019-01-07 18:44 ` [dpdk-stable] [dpdk-dev] " Chas Williams ` (2 more replies) 2019-01-08 6:18 ` [dpdk-stable] [PATCH] " Hari Kumar Vemula 3 siblings, 3 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-07 13:01 UTC (permalink / raw) To: dev Cc: reshma.pattan, declan.doherty, jananeex.m.parthasarathy, Hari Kumar Vemula, stable Create bonded device test is failing due to improper initialisation in bonded device configuration. which leads to crash while setting up queues. The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of bonded device which fails. This is due to "rx_desc_lim" is set to 0 as default value of bonded device during bond_alloc(). Hence nb_rx_desc (1024) is > 0 and test fails. Fix is to set the default values of rx_desc_lim of bonded device to appropriate value. Fixes: 2efb58cbab ("bond: new link bonding library") Cc: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> --- drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 44deaf119..e0888e960 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2225,6 +2225,11 @@ static void bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { struct bond_dev_private *internals = dev->data->dev_private; + struct rte_eth_desc_lim bond_lim = { + .nb_max = UINT16_MAX, + .nb_min = 0, + .nb_align = 1, + }; uint16_t max_nb_rx_queues = UINT16_MAX; uint16_t max_nb_tx_queues = UINT16_MAX; @@ -2263,10 +2268,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) memcpy(&dev_info->default_txconf, &internals->default_txconf, sizeof(dev_info->default_txconf)); - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, - sizeof(dev_info->rx_desc_lim)); - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, - sizeof(dev_info->tx_desc_lim)); + dev_info->rx_desc_lim = bond_lim; + dev_info->tx_desc_lim = bond_lim; /** * If dedicated hw queues enabled for link bonding device in LACP mode -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] net/bonding: fix create bonded device test failure 2019-01-07 13:01 ` [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure Hari Kumar Vemula @ 2019-01-07 18:44 ` Chas Williams 2019-01-08 10:27 ` Ferruh Yigit 2019-01-15 17:37 ` [dpdk-stable] " Pattan, Reshma 2019-01-28 7:28 ` [dpdk-stable] [PATCH v2] " Hari Kumar Vemula 2 siblings, 1 reply; 26+ messages in thread From: Chas Williams @ 2019-01-07 18:44 UTC (permalink / raw) To: Hari Kumar Vemula, dev Cc: reshma.pattan, declan.doherty, jananeex.m.parthasarathy, stable On 1/7/19 8:01 AM, Hari Kumar Vemula wrote: > Create bonded device test is failing due to improper initialisation in > bonded device configuration. which leads to crash while setting up queues. > > The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of > bonded device which fails. > This is due to "rx_desc_lim" is set to 0 as default value of bonded device > during bond_alloc(). > Hence nb_rx_desc (1024) is > 0 and test fails. > > Fix is to set the default values of rx_desc_lim of bonded device to > appropriate value. The default values for the bond device aren't known until the first slave is added. Can you explain your setup? What PMD are you using for testing? > > Fixes: 2efb58cbab ("bond: new link bonding library") > Cc: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > --- > drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c > index 44deaf119..e0888e960 100644 > --- a/drivers/net/bonding/rte_eth_bond_pmd.c > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c > @@ -2225,6 +2225,11 @@ static void > bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) > { > struct bond_dev_private *internals = dev->data->dev_private; > + struct rte_eth_desc_lim bond_lim = { > + .nb_max = UINT16_MAX, > + .nb_min = 0, > + .nb_align = 1, > + }; > > uint16_t max_nb_rx_queues = UINT16_MAX; > uint16_t max_nb_tx_queues = UINT16_MAX; > @@ -2263,10 +2268,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) > memcpy(&dev_info->default_txconf, &internals->default_txconf, > sizeof(dev_info->default_txconf)); > > - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, > - sizeof(dev_info->rx_desc_lim)); > - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, > - sizeof(dev_info->tx_desc_lim)); > + dev_info->rx_desc_lim = bond_lim; > + dev_info->tx_desc_lim = bond_lim; > > /** > * If dedicated hw queues enabled for link bonding device in LACP mode > ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] net/bonding: fix create bonded device test failure 2019-01-07 18:44 ` [dpdk-stable] [dpdk-dev] " Chas Williams @ 2019-01-08 10:27 ` Ferruh Yigit 0 siblings, 0 replies; 26+ messages in thread From: Ferruh Yigit @ 2019-01-08 10:27 UTC (permalink / raw) To: Chas Williams, Hari Kumar Vemula, dev Cc: reshma.pattan, declan.doherty, jananeex.m.parthasarathy, stable On 1/7/2019 6:44 PM, Chas Williams wrote: > > > On 1/7/19 8:01 AM, Hari Kumar Vemula wrote: >> Create bonded device test is failing due to improper initialisation in >> bonded device configuration. which leads to crash while setting up queues. >> >> The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of >> bonded device which fails. >> This is due to "rx_desc_lim" is set to 0 as default value of bonded device >> during bond_alloc(). >> Hence nb_rx_desc (1024) is > 0 and test fails. >> >> Fix is to set the default values of rx_desc_lim of bonded device to >> appropriate value. > > The default values for the bond device aren't known until the first > slave is added. Can you explain your setup? What PMD are you > using for testing? As far as I understand, 'rte_eth_rx_queue_setup()' is failing with bond eth device since 'nb_rx_desc' should be less than 'dev_info.rx_desc_lim.nb_max' but bonding sets 0 to 'nb_max'. But not sure how to handle this from bonding point of view, this patch gives most permissive values, but should bonding get these values from its slaves? > >> >> Fixes: 2efb58cbab ("bond: new link bonding library") >> Cc: stable@dpdk.org >> >> Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> >> --- >> drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++---- >> 1 file changed, 7 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c >> index 44deaf119..e0888e960 100644 >> --- a/drivers/net/bonding/rte_eth_bond_pmd.c >> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c >> @@ -2225,6 +2225,11 @@ static void >> bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) >> { >> struct bond_dev_private *internals = dev->data->dev_private; >> + struct rte_eth_desc_lim bond_lim = { >> + .nb_max = UINT16_MAX, >> + .nb_min = 0, >> + .nb_align = 1, >> + }; >> >> uint16_t max_nb_rx_queues = UINT16_MAX; >> uint16_t max_nb_tx_queues = UINT16_MAX; >> @@ -2263,10 +2268,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) >> memcpy(&dev_info->default_txconf, &internals->default_txconf, >> sizeof(dev_info->default_txconf)); >> >> - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, >> - sizeof(dev_info->rx_desc_lim)); >> - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, >> - sizeof(dev_info->tx_desc_lim)); >> + dev_info->rx_desc_lim = bond_lim; >> + dev_info->tx_desc_lim = bond_lim; >> >> /** >> * If dedicated hw queues enabled for link bonding device in LACP mode >> ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure 2019-01-07 13:01 ` [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure Hari Kumar Vemula 2019-01-07 18:44 ` [dpdk-stable] [dpdk-dev] " Chas Williams @ 2019-01-15 17:37 ` Pattan, Reshma 2019-01-28 7:28 ` [dpdk-stable] [PATCH v2] " Hari Kumar Vemula 2 siblings, 0 replies; 26+ messages in thread From: Pattan, Reshma @ 2019-01-15 17:37 UTC (permalink / raw) To: Vemula, Hari KumarX, Chas Williams, Doherty, Declan, dev Cc: Parthasarathy, JananeeX M, stable > -----Original Message----- > From: Vemula, Hari KumarX > Sent: Monday, January 7, 2019 1:01 PM > > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > --- > drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, > - sizeof(dev_info->rx_desc_lim)); > - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, > - sizeof(dev_info->tx_desc_lim)); > + dev_info->rx_desc_lim = bond_lim; > + dev_info->tx_desc_lim = bond_lim; I relooked into this, these values should be filled from salve data like the way done for max_nb_rx_queues and max_nb_tx_queues Existing code snippet: if (slave_info.max_rx_queues < max_nb_rx_queues) max_nb_rx_queues = slave_info.max_rx_queues; if (slave_info.max_tx_queues < max_nb_tx_queues) max_nb_tx_queues = slave_info.max_tx_queues; So, something like below you should add for rx/tx desc limit I guess. if (slave_info.rx_desc_lim.nb_max < max_rx_desc_lim) max_rx_desc_lim = slave_info.rx_desc_lim.nb_max; if (slave_info.tx_desc_lim.nb_max < max_tx_desc_lim) max_tx_desc_lim = slave_info.tx_desc_lim.nb_max; dev_info->rx_desc_lim.nb_max = max_rx_desc_lim; dev_info->tx_desc_lim.nb_max = max_tx_desc_lim; @Williams/Declan: Does this make sense? Thanks, Reshma ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v2] net/bonding: fix create bonded device test failure 2019-01-07 13:01 ` [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure Hari Kumar Vemula 2019-01-07 18:44 ` [dpdk-stable] [dpdk-dev] " Chas Williams 2019-01-15 17:37 ` [dpdk-stable] " Pattan, Reshma @ 2019-01-28 7:28 ` Hari Kumar Vemula 2019-01-31 23:40 ` [dpdk-stable] [dpdk-dev] " Chas Williams 2019-02-05 13:39 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula 2 siblings, 2 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-28 7:28 UTC (permalink / raw) To: dev Cc: declan.doherty, reshma.pattan, jananeex.m.parthasarathy, Hari Kumar Vemula, stable Create bonded device test is failing due to improper initialisation in bonded device configuration. which leads to crash while setting up queues. The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of bonded device which fails. This is due to "rx_desc_lim" is set to 0 as default value of bonded device during bond_alloc(). Hence nb_rx_desc (1024) is > 0 and test fails. Fix is to set the default values of rx_desc_lim of bonded device to appropriate value. Fixes: 2efb58cbab6e ("bond: new link bonding library") Cc: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> --- v2: bonded device desc_lim values are received from slave configuration --- drivers/net/bonding/rte_eth_bond_pmd.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 44deaf119..23cec2549 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2228,6 +2228,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) uint16_t max_nb_rx_queues = UINT16_MAX; uint16_t max_nb_tx_queues = UINT16_MAX; + uint16_t max_rx_desc_lim = UINT16_MAX; + uint16_t max_tx_desc_lim = UINT16_MAX; dev_info->max_mac_addrs = BOND_MAX_MAC_ADDRS; @@ -2252,6 +2254,12 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) if (slave_info.max_tx_queues < max_nb_tx_queues) max_nb_tx_queues = slave_info.max_tx_queues; + + if (slave_info.rx_desc_lim.nb_max < max_rx_desc_lim) + max_rx_desc_lim = slave_info.rx_desc_lim.nb_max; + + if (slave_info.tx_desc_lim.nb_max < max_tx_desc_lim) + max_tx_desc_lim = slave_info.tx_desc_lim.nb_max; } } @@ -2263,10 +2271,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) memcpy(&dev_info->default_txconf, &internals->default_txconf, sizeof(dev_info->default_txconf)); - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, - sizeof(dev_info->rx_desc_lim)); - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, - sizeof(dev_info->tx_desc_lim)); + dev_info->rx_desc_lim.nb_max = max_rx_desc_lim; + dev_info->tx_desc_lim.nb_max = max_tx_desc_lim; /** * If dedicated hw queues enabled for link bonding device in LACP mode -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH v2] net/bonding: fix create bonded device test failure 2019-01-28 7:28 ` [dpdk-stable] [PATCH v2] " Hari Kumar Vemula @ 2019-01-31 23:40 ` Chas Williams 2019-02-05 13:39 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula 1 sibling, 0 replies; 26+ messages in thread From: Chas Williams @ 2019-01-31 23:40 UTC (permalink / raw) To: Hari Kumar Vemula, dev Cc: declan.doherty, reshma.pattan, jananeex.m.parthasarathy, stable On 1/28/19 2:28 AM, Hari Kumar Vemula wrote: > Create bonded device test is failing due to improper initialisation in > bonded device configuration. which leads to crash while setting up queues. > > The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of > bonded device which fails. > This is due to "rx_desc_lim" is set to 0 as default value of bonded device > during bond_alloc(). > Hence nb_rx_desc (1024) is > 0 and test fails. > > Fix is to set the default values of rx_desc_lim of bonded device to > appropriate value. > > Fixes: 2efb58cbab6e ("bond: new link bonding library") > Cc: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> Acked-by: Chas Williams <chas3@att.com> > --- > v2: bonded device desc_lim values are received from slave configuration > --- > drivers/net/bonding/rte_eth_bond_pmd.c | 14 ++++++++++---- > 1 file changed, 10 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c > index 44deaf119..23cec2549 100644 > --- a/drivers/net/bonding/rte_eth_bond_pmd.c > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c > @@ -2228,6 +2228,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) > > uint16_t max_nb_rx_queues = UINT16_MAX; > uint16_t max_nb_tx_queues = UINT16_MAX; > + uint16_t max_rx_desc_lim = UINT16_MAX; > + uint16_t max_tx_desc_lim = UINT16_MAX; > > dev_info->max_mac_addrs = BOND_MAX_MAC_ADDRS; > > @@ -2252,6 +2254,12 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) > > if (slave_info.max_tx_queues < max_nb_tx_queues) > max_nb_tx_queues = slave_info.max_tx_queues; > + > + if (slave_info.rx_desc_lim.nb_max < max_rx_desc_lim) > + max_rx_desc_lim = slave_info.rx_desc_lim.nb_max; > + > + if (slave_info.tx_desc_lim.nb_max < max_tx_desc_lim) > + max_tx_desc_lim = slave_info.tx_desc_lim.nb_max; > } > } > > @@ -2263,10 +2271,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) > memcpy(&dev_info->default_txconf, &internals->default_txconf, > sizeof(dev_info->default_txconf)); > > - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, > - sizeof(dev_info->rx_desc_lim)); > - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, > - sizeof(dev_info->tx_desc_lim)); > + dev_info->rx_desc_lim.nb_max = max_rx_desc_lim; > + dev_info->tx_desc_lim.nb_max = max_tx_desc_lim; > > /** > * If dedicated hw queues enabled for link bonding device in LACP mode > ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH v3] net/bonding: fix create bonded device test failure 2019-01-28 7:28 ` [dpdk-stable] [PATCH v2] " Hari Kumar Vemula 2019-01-31 23:40 ` [dpdk-stable] [dpdk-dev] " Chas Williams @ 2019-02-05 13:39 ` Hari Kumar Vemula 2019-02-07 13:34 ` Ferruh Yigit 1 sibling, 1 reply; 26+ messages in thread From: Hari Kumar Vemula @ 2019-02-05 13:39 UTC (permalink / raw) To: dev Cc: declan.doherty, reshma.pattan, radu.nicolau, jananeex.m.parthasarathy, Hari Kumar Vemula, stable test_create_bonded_device is failing due to improper initialisation in bonded device configuration. Which leads to crash while setting up queues. The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of bonded device which fails. This is due to "rx_desc_lim" is set to 0 as default value of bonded device during bond_alloc(). Hence nb_rx_desc (1024) is > 0 and test fails. Fix is to set the default values of rx_desc_lim of bonded device to appropriate value. Receive the values from slaves configuration like done for other existing slave configuration Fixes: 2efb58cbab6e ("bond: new link bonding library") Cc: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> Acked-by: Chas Williams <chas3@att.com> --- v3: Modified commit message v2: Bonded device desc_lim values are received from slave configuration --- drivers/net/bonding/rte_eth_bond_pmd.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 44deaf119..23cec2549 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2228,6 +2228,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) uint16_t max_nb_rx_queues = UINT16_MAX; uint16_t max_nb_tx_queues = UINT16_MAX; + uint16_t max_rx_desc_lim = UINT16_MAX; + uint16_t max_tx_desc_lim = UINT16_MAX; dev_info->max_mac_addrs = BOND_MAX_MAC_ADDRS; @@ -2252,6 +2254,12 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) if (slave_info.max_tx_queues < max_nb_tx_queues) max_nb_tx_queues = slave_info.max_tx_queues; + + if (slave_info.rx_desc_lim.nb_max < max_rx_desc_lim) + max_rx_desc_lim = slave_info.rx_desc_lim.nb_max; + + if (slave_info.tx_desc_lim.nb_max < max_tx_desc_lim) + max_tx_desc_lim = slave_info.tx_desc_lim.nb_max; } } @@ -2263,10 +2271,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) memcpy(&dev_info->default_txconf, &internals->default_txconf, sizeof(dev_info->default_txconf)); - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, - sizeof(dev_info->rx_desc_lim)); - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, - sizeof(dev_info->tx_desc_lim)); + dev_info->rx_desc_lim.nb_max = max_rx_desc_lim; + dev_info->tx_desc_lim.nb_max = max_tx_desc_lim; /** * If dedicated hw queues enabled for link bonding device in LACP mode -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [dpdk-stable] [PATCH v3] net/bonding: fix create bonded device test failure 2019-02-05 13:39 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula @ 2019-02-07 13:34 ` Ferruh Yigit 0 siblings, 0 replies; 26+ messages in thread From: Ferruh Yigit @ 2019-02-07 13:34 UTC (permalink / raw) To: Hari Kumar Vemula, dev Cc: declan.doherty, reshma.pattan, radu.nicolau, jananeex.m.parthasarathy, stable On 2/5/2019 1:39 PM, Hari Kumar Vemula wrote: > test_create_bonded_device is failing due to improper initialisation in > bonded device configuration. Which leads to crash while setting up queues. > > The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of > bonded device which fails. > This is due to "rx_desc_lim" is set to 0 as default value of bonded device > during bond_alloc(). > Hence nb_rx_desc (1024) is > 0 and test fails. > > Fix is to set the default values of rx_desc_lim of bonded device to > appropriate value. > Receive the values from slaves configuration like done for other existing > slave configuration > > Fixes: 2efb58cbab6e ("bond: new link bonding library") > Cc: stable@dpdk.org > > Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> > Acked-by: Chas Williams <chas3@att.com> Applied to dpdk-next-net/master, thanks. ^ permalink raw reply [flat|nested] 26+ messages in thread
* [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure [not found] <yes> ` (2 preceding siblings ...) 2019-01-07 13:01 ` [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure Hari Kumar Vemula @ 2019-01-08 6:18 ` Hari Kumar Vemula 3 siblings, 0 replies; 26+ messages in thread From: Hari Kumar Vemula @ 2019-01-08 6:18 UTC (permalink / raw) To: jananeex.m.parthasarathy; +Cc: Hari Kumar Vemula, stable Create bonded device test is failing due to improper initialisation in bonded device configuration. which leads to crash while setting up queues. The value of nb_rx_desc is checked if it is not in range of rx_desc_lim of bonded device which fails. This is due to "rx_desc_lim" is set to 0 as default value of bonded device during bond_alloc(). Hence nb_rx_desc (1024) is > 0 and test fails. Fix is to set the default values of rx_desc_lim of bonded device to appropriate value. Fixes: 2efb58cbab ("bond: new link bonding library") Cc: stable@dpdk.org Signed-off-by: Hari Kumar Vemula <hari.kumarx.vemula@intel.com> --- drivers/net/bonding/rte_eth_bond_pmd.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 44deaf119..e0888e960 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -2225,6 +2225,11 @@ static void bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { struct bond_dev_private *internals = dev->data->dev_private; + struct rte_eth_desc_lim bond_lim = { + .nb_max = UINT16_MAX, + .nb_min = 0, + .nb_align = 1, + }; uint16_t max_nb_rx_queues = UINT16_MAX; uint16_t max_nb_tx_queues = UINT16_MAX; @@ -2263,10 +2268,8 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) memcpy(&dev_info->default_txconf, &internals->default_txconf, sizeof(dev_info->default_txconf)); - memcpy(&dev_info->rx_desc_lim, &internals->rx_desc_lim, - sizeof(dev_info->rx_desc_lim)); - memcpy(&dev_info->tx_desc_lim, &internals->tx_desc_lim, - sizeof(dev_info->tx_desc_lim)); + dev_info->rx_desc_lim = bond_lim; + dev_info->tx_desc_lim = bond_lim; /** * If dedicated hw queues enabled for link bonding device in LACP mode -- 2.17.2 ^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2019-02-07 13:35 UTC | newest] Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <yes> 2019-01-03 12:28 ` [dpdk-stable] [PATCH v2] eal: fix core number validation Hari kumar Vemula 2019-01-03 13:03 ` David Marchand 2019-01-07 7:05 ` Hari Kumar Vemula 2019-01-07 10:25 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula 2019-01-10 10:11 ` David Marchand 2019-01-11 14:15 ` [dpdk-stable] [PATCH v4] " Hari Kumar Vemula 2019-01-11 15:06 ` David Marchand 2019-01-14 10:08 ` [dpdk-stable] [PATCH v5] " Hari Kumar Vemula 2019-01-14 10:28 ` Hari Kumar Vemula 2019-01-14 14:39 ` David Marchand 2019-01-17 10:11 ` [dpdk-stable] [PATCH v6] " Hari Kumar Vemula 2019-01-17 12:13 ` Hari Kumar Vemula 2019-01-17 12:19 ` [dpdk-stable] [dpdk-dev] " Bruce Richardson 2019-01-17 12:32 ` David Marchand 2019-01-17 16:29 ` [dpdk-stable] " Thomas Monjalon 2019-01-17 16:31 ` Thomas Monjalon 2019-01-04 13:10 ` [dpdk-stable] [PATCH v2] " Hari kumar Vemula 2019-01-07 13:01 ` [dpdk-stable] [PATCH] net/bonding: fix create bonded device test failure Hari Kumar Vemula 2019-01-07 18:44 ` [dpdk-stable] [dpdk-dev] " Chas Williams 2019-01-08 10:27 ` Ferruh Yigit 2019-01-15 17:37 ` [dpdk-stable] " Pattan, Reshma 2019-01-28 7:28 ` [dpdk-stable] [PATCH v2] " Hari Kumar Vemula 2019-01-31 23:40 ` [dpdk-stable] [dpdk-dev] " Chas Williams 2019-02-05 13:39 ` [dpdk-stable] [PATCH v3] " Hari Kumar Vemula 2019-02-07 13:34 ` Ferruh Yigit 2019-01-08 6:18 ` [dpdk-stable] [PATCH] " Hari Kumar Vemula
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).