* [PATCH] app/testpmd: validate dscp and vlan table entries for meter creation @ 2025-08-22 12:14 Khadem Ullah 2025-08-26 14:00 ` Stephen Hemminger 2025-08-27 11:18 ` [PATCH v2] " Khadem Ullah 0 siblings, 2 replies; 5+ messages in thread From: Khadem Ullah @ 2025-08-22 12:14 UTC (permalink / raw) To: Cristian Dumitrescu, Aman Singh, Sunil Kumar Kori Cc: dev, Khadem Ullah, stable Add validation mechanism for meter creation. The maximum possible entries are [<dscp_tbl_entry0> <dscp_tbl_entry1> ...<dscp_tbl_entry63>] [<vlan_tbl_entry0> <vlan_tbl_entry1> ... <vlan_tbl_entry15>]. Currently, testpmd allows any input table entries for dscp and vlan tables. This patch validates the maximum possible dscp and vlan table entries for meter creation. Fixes: 9f5488e326d3b ("app/testpmd: support different input color method") Cc: stable@dpdk.org Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> --- app/test-pmd/cmdline_mtr.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c index e16c5b268f..1435645c1a 100644 --- a/app/test-pmd/cmdline_mtr.c +++ b/app/test-pmd/cmdline_mtr.c @@ -85,14 +85,33 @@ parse_uint(uint64_t *value, const char *str) return 0; } +static int +validate_input_color_table_entries(char *str) +{ + char *token; + int i = 0; + token = strtok_r(str, PARSE_DELIMITER, &str); + for (i = 0; token != NULL; i++) + token = strtok_r(str, PARSE_DELIMITER, &str); + + if (i > (MAX_DSCP_TABLE_ENTRIES + MAX_VLAN_TABLE_ENTRIES)) + return -1; + else + return 0; +} + static int parse_input_color_table_entries(char *str, enum rte_color **dscp_table, enum rte_color **vlan_table) { enum rte_color *vlan, *dscp; char *token; + char *temp_str = strdup(str); int i = 0; + if (validate_input_color_table_entries(temp_str)) + return -1; + token = strtok_r(str, PARSE_DELIMITER, &str); if (token == NULL) return 0; -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] app/testpmd: validate dscp and vlan table entries for meter creation 2025-08-22 12:14 [PATCH] app/testpmd: validate dscp and vlan table entries for meter creation Khadem Ullah @ 2025-08-26 14:00 ` Stephen Hemminger 2025-08-27 11:18 ` [PATCH v2] " Khadem Ullah 1 sibling, 0 replies; 5+ messages in thread From: Stephen Hemminger @ 2025-08-26 14:00 UTC (permalink / raw) To: Khadem Ullah Cc: Cristian Dumitrescu, Aman Singh, Sunil Kumar Kori, dev, stable On Fri, 22 Aug 2025 08:14:30 -0400 Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> wrote: > Add validation mechanism for meter creation. The maximum > possible entries are > [<dscp_tbl_entry0> <dscp_tbl_entry1> ...<dscp_tbl_entry63>] > [<vlan_tbl_entry0> <vlan_tbl_entry1> ... <vlan_tbl_entry15>]. > Currently, testpmd allows any input table entries for dscp > and vlan tables. > > This patch validates the maximum possible dscp and vlan table > entries for meter creation. > > Fixes: 9f5488e326d3b ("app/testpmd: support different input color method") > Cc: stable@dpdk.org > > Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> > --- > app/test-pmd/cmdline_mtr.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c > index e16c5b268f..1435645c1a 100644 > --- a/app/test-pmd/cmdline_mtr.c > +++ b/app/test-pmd/cmdline_mtr.c > @@ -85,14 +85,33 @@ parse_uint(uint64_t *value, const char *str) > return 0; > } > > +static int > +validate_input_color_table_entries(char *str) > +{ > + char *token; > + int i = 0; Useless initialization > + token = strtok_r(str, PARSE_DELIMITER, &str); > + for (i = 0; token != NULL; i++) > + token = strtok_r(str, PARSE_DELIMITER, &str); Rather than parsing all the way to the end, why not put the max test inside the loop > + if (i > (MAX_DSCP_TABLE_ENTRIES + MAX_VLAN_TABLE_ENTRIES)) > + return -1; > + else > + return 0; > +} > + > static int > parse_input_color_table_entries(char *str, enum rte_color **dscp_table, > enum rte_color **vlan_table) > { > enum rte_color *vlan, *dscp; > char *token; > + char *temp_str = strdup(str); > int i = 0; > > + if (validate_input_color_table_entries(temp_str)) > + return -1; > + On error, this leaks the temporary string created (temp_str). ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2] app/testpmd: validate dscp and vlan table entries for meter creation 2025-08-22 12:14 [PATCH] app/testpmd: validate dscp and vlan table entries for meter creation Khadem Ullah 2025-08-26 14:00 ` Stephen Hemminger @ 2025-08-27 11:18 ` Khadem Ullah 2025-08-27 16:05 ` Stephen Hemminger 2025-08-28 5:29 ` [PATCH v3] " Khadem Ullah 1 sibling, 2 replies; 5+ messages in thread From: Khadem Ullah @ 2025-08-27 11:18 UTC (permalink / raw) To: Cristian Dumitrescu, Aman Singh, Sunil Kumar Kori Cc: dev, Khadem Ullah, stable Add validation mechanism for meter creation. The maximum possible entries are [<dscp_tbl_entry0> <dscp_tbl_entry1> ...<dscp_tbl_entry63>] [<vlan_tbl_entry0> <vlan_tbl_entry1> ... <vlan_tbl_entry15>]. Currently, testpmd allows any input table entries for dscp and vlan tables. This patch validates the maximum possible dscp and vlan table entries for meter creation. Fixes: 9f5488e326d3b ("app/testpmd: support different input color method") Cc: stable@dpdk.org Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> --- app/test-pmd/cmdline_mtr.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c index e16c5b268f..256d5b4238 100644 --- a/app/test-pmd/cmdline_mtr.c +++ b/app/test-pmd/cmdline_mtr.c @@ -85,14 +85,33 @@ parse_uint(uint64_t *value, const char *str) return 0; } +static int +validate_input_color_table_entries(char *str) +{ + char *token = strtok_r(str, PARSE_DELIMITER, &str); + for (int i = 0; token != NULL; i++) { + if (i > ((MAX_DSCP_TABLE_ENTRIES + MAX_VLAN_TABLE_ENTRIES) - 1)) + return -1; + token = strtok_r(str, PARSE_DELIMITER, &str); + } + return 0; +} + static int parse_input_color_table_entries(char *str, enum rte_color **dscp_table, enum rte_color **vlan_table) { enum rte_color *vlan, *dscp; char *token; + char *temp_str = strdup(str); int i = 0; + if (validate_input_color_table_entries(temp_str)) { + free(temp_str); + return -1; + } + free(temp_str); + token = strtok_r(str, PARSE_DELIMITER, &str); if (token == NULL) return 0; -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] app/testpmd: validate dscp and vlan table entries for meter creation 2025-08-27 11:18 ` [PATCH v2] " Khadem Ullah @ 2025-08-27 16:05 ` Stephen Hemminger 2025-08-28 5:29 ` [PATCH v3] " Khadem Ullah 1 sibling, 0 replies; 5+ messages in thread From: Stephen Hemminger @ 2025-08-27 16:05 UTC (permalink / raw) To: Khadem Ullah Cc: Cristian Dumitrescu, Aman Singh, Sunil Kumar Kori, dev, stable On Wed, 27 Aug 2025 07:18:37 -0400 Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> wrote: > > +static int > +validate_input_color_table_entries(char *str) > +{ > + char *token = strtok_r(str, PARSE_DELIMITER, &str); > + for (int i = 0; token != NULL; i++) { > + if (i > ((MAX_DSCP_TABLE_ENTRIES + MAX_VLAN_TABLE_ENTRIES) - 1)) > + return -1; > + token = strtok_r(str, PARSE_DELIMITER, &str); > + } > + return 0; > +} The loop doesn't look right, it is looking form next deliminator at the start of the list? Normally strtok_r is used with a different pointer as the "saveptr". From man page. The strtok_r() function is a reentrant version of strtok(). The saveptr argument is a pointer to a char * variable that is used internally by strtok_r() in order to maintain con‐ text between successive calls that parse the same string. On the first call to strtok_r(), str should point to the string to be parsed, and the value of *saveptr is ignored (but see VERSIONS). In subsequent calls, str should be NULL, and saveptr (and the buffer that it points to) should be unchanged since the previous call. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3] app/testpmd: validate dscp and vlan table entries for meter creation 2025-08-27 11:18 ` [PATCH v2] " Khadem Ullah 2025-08-27 16:05 ` Stephen Hemminger @ 2025-08-28 5:29 ` Khadem Ullah 1 sibling, 0 replies; 5+ messages in thread From: Khadem Ullah @ 2025-08-28 5:29 UTC (permalink / raw) To: Cristian Dumitrescu, Aman Singh, Sunil Kumar Kori Cc: dev, Khadem Ullah, stable Add validation mechanism for meter creation. The maximum possible entries are [<dscp_tbl_entry0> <dscp_tbl_entry1> ...<dscp_tbl_entry63>] [<vlan_tbl_entry0> <vlan_tbl_entry1> ... <vlan_tbl_entry15>]. Currently, testpmd allows any input table entries for dscp and vlan tables. This patch validates the maximum possible dscp and vlan table entries for meter creation. Fixes: 9f5488e326d3b ("app/testpmd: support different input color method") Cc: stable@dpdk.org Signed-off-by: Khadem Ullah <14pwcse1224@uetpeshawar.edu.pk> --- app/test-pmd/cmdline_mtr.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/app/test-pmd/cmdline_mtr.c b/app/test-pmd/cmdline_mtr.c index e16c5b268f..0c5897ada8 100644 --- a/app/test-pmd/cmdline_mtr.c +++ b/app/test-pmd/cmdline_mtr.c @@ -85,15 +85,35 @@ parse_uint(uint64_t *value, const char *str) return 0; } +static int +validate_input_color_table_entries(char *str) +{ + char *saveptr; + char *token = strtok_r(str, PARSE_DELIMITER, &saveptr); + for (int i = 0; token != NULL; i++) { + if (i > ((MAX_DSCP_TABLE_ENTRIES + MAX_VLAN_TABLE_ENTRIES) - 1)) + return -1; + token = strtok_r(NULL, PARSE_DELIMITER, &saveptr); + } + return 0; +} + static int parse_input_color_table_entries(char *str, enum rte_color **dscp_table, enum rte_color **vlan_table) { enum rte_color *vlan, *dscp; - char *token; + char *token, *saveptr; + char *temp_str = strdup(str); int i = 0; - token = strtok_r(str, PARSE_DELIMITER, &str); + if (validate_input_color_table_entries(temp_str)) { + free(temp_str); + return -1; + } + free(temp_str); + + token = strtok_r(str, PARSE_DELIMITER, &saveptr); if (token == NULL) return 0; @@ -117,7 +137,7 @@ parse_input_color_table_entries(char *str, enum rte_color **dscp_table, if (i == MAX_DSCP_TABLE_ENTRIES) break; - token = strtok_r(str, PARSE_DELIMITER, &str); + token = strtok_r(NULL, PARSE_DELIMITER, &saveptr); if (token == NULL) { free(dscp); return -1; @@ -126,7 +146,7 @@ parse_input_color_table_entries(char *str, enum rte_color **dscp_table, *dscp_table = dscp; - token = strtok_r(str, PARSE_DELIMITER, &str); + token = strtok_r(NULL, PARSE_DELIMITER, &saveptr); if (token == NULL) return 0; @@ -154,7 +174,7 @@ parse_input_color_table_entries(char *str, enum rte_color **dscp_table, if (i == MAX_VLAN_TABLE_ENTRIES) break; - token = strtok_r(str, PARSE_DELIMITER, &str); + token = strtok_r(NULL, PARSE_DELIMITER, &saveptr); if (token == NULL) { free(vlan); free(*dscp_table); -- 2.43.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-08-28 5:29 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-08-22 12:14 [PATCH] app/testpmd: validate dscp and vlan table entries for meter creation Khadem Ullah 2025-08-26 14:00 ` Stephen Hemminger 2025-08-27 11:18 ` [PATCH v2] " Khadem Ullah 2025-08-27 16:05 ` Stephen Hemminger 2025-08-28 5:29 ` [PATCH v3] " Khadem Ullah
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).