Discussion:
[dpdk-dev] [PATCH] app/testpmd: add boundary check in flow commandline
(too old to reply)
Wei Zhao
2018-12-04 05:51:30 UTC
Permalink
There is need to add boundary for input number from commandline,
If it beyond the defination, code will return error.

Signed-off-by: Wei Zhao <***@intel.com>
---
app/test-pmd/cmdline_flow.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 23ea7cc..515f95c 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -4325,6 +4325,25 @@ parse_int(struct context *ctx, const struct token *token,
}
buf = (uint8_t *)ctx->object + arg->offset;
size = arg->size;
+ switch (size) {
+ case sizeof(uint8_t):
+ if (u > 0xff)
+ return -1;
+ case sizeof(uint16_t):
+ if (u > 0xffff)
+ return -1;
+ case sizeof(uint8_t [3]):
+ if (u > 0xffffff)
+ return -1;
+ case sizeof(uint32_t):
+ if (u > 0xffffffff)
+ return -1;
+ case sizeof(uint64_t):
+ if (u > 0xffffffffffffffff)
+ return -1;
+ default:
+ break;
+ }
objmask:
switch (size) {
case sizeof(uint8_t):
--
2.7.5
Zhao1, Wei
2018-12-04 07:46:00 UTC
Permalink
Send on behalf of Peng, Yuan <***@intel.com>


Tested-by: Peng, Yuan <***@intel.com>

- Tested Branch: dpdk-master
- Tested commit 0da7f445df445630c794897347ee360d6fe6348b
- OS: 4.5.5-300.fc24.x86_64
- GCC: gcc (GCC) 5.3.1 20151207 (Red Hat 5.3.1-2)
- CPU: Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz
- NIC: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb] (rev 01)
- Default x86_64-native-linuxapp-gcc configuration
- Prerequisites:
- Total 1 cases, 1 passed, 0 failed

- Prerequisites command / instruction:
Bind DUT ports to dpdk driver

- Case:
Steps:
Start test application with normal eal parameter.
./$RTE_TARGET/app/testpmd -c f -n 4 -- -i
testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / udp src is 22 dst is 65536 / end actions queue index 0 / end
Bad arguments
testpmd> flow create 0 ingress pattern eth / ipv4 src is 192.168.0.3 dst is 192.168.0.4 / udp src is 65536 dst is 33 / end actions queue index 0 / end
Bad arguments
the rule failed to be created.
I tried TCP/SCTP rule, and got the same result.
I tried validating the rule instead of creating the rules with wrong sport/dport, and got the same result.
The bug is fixed.
-----Original Message-----
From: Zhao1, Wei
Sent: Tuesday, December 4, 2018 1:52 PM
Subject: [PATCH] app/testpmd: add boundary check in flow commandline
There is need to add boundary for input number from commandline, If it
beyond the defination, code will return error.
---
app/test-pmd/cmdline_flow.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 23ea7cc..515f95c 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -4325,6 +4325,25 @@ parse_int(struct context *ctx, const struct token *token,
}
buf = (uint8_t *)ctx->object + arg->offset;
size = arg->size;
+ switch (size) {
+ if (u > 0xff)
+ return -1;
+ if (u > 0xffff)
+ return -1;
+ if (u > 0xffffff)
+ return -1;
+ if (u > 0xffffffff)
+ return -1;
+ if (u > 0xffffffffffffffff)
+ return -1;
+ break;
+ }
switch (size) {
--
2.7.5
Ananyev, Konstantin
2018-12-04 09:22:21 UTC
Permalink
-----Original Message-----
Sent: Tuesday, December 4, 2018 5:52 AM
Subject: [dpdk-dev] [PATCH] app/testpmd: add boundary check in flow commandline
There is need to add boundary for input number from commandline,
If it beyond the defination, code will return error.
---
app/test-pmd/cmdline_flow.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 23ea7cc..515f95c 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -4325,6 +4325,25 @@ parse_int(struct context *ctx, const struct token *token,
}
buf = (uint8_t *)ctx->object + arg->offset;
size = arg->size;
+ switch (size) {
+ if (u > 0xff)
+ return -1;
+ if (u > 0xffff)
+ return -1;
+ if (u > 0xffffff)
+ return -1;
+ if (u > 0xffffffff)
+ return -1;
+ if (u > 0xffffffffffffffff)
+ return -1;
+ break;
+ }
Why just not something like:
if (u > RTE_LEN2MASK(size * CHAR_BIT))
return -1;
?
Konstantin
switch (size) {
--
2.7.5
Zhao1, Wei
2018-12-06 02:34:21 UTC
Permalink
-----Original Message-----
From: Ananyev, Konstantin
Sent: Tuesday, December 4, 2018 5:22 PM
Subject: RE: [dpdk-dev] [PATCH] app/testpmd: add boundary check in flow
commandline
-----Original Message-----
Sent: Tuesday, December 4, 2018 5:52 AM
Subject: [dpdk-dev] [PATCH] app/testpmd: add boundary check in flow commandline
There is need to add boundary for input number from commandline, If it
beyond the defination, code will return error.
---
app/test-pmd/cmdline_flow.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 23ea7cc..515f95c 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -4325,6 +4325,25 @@ parse_int(struct context *ctx, const struct token
*token,
}
buf = (uint8_t *)ctx->object + arg->offset;
size = arg->size;
+ switch (size) {
+ if (u > 0xff)
+ return -1;
+ if (u > 0xffff)
+ return -1;
+ if (u > 0xffffff)
+ return -1;
+ if (u > 0xffffffff)
+ return -1;
+ if (u > 0xffffffffffffffff)
+ return -1;
+ break;
+ }
if (u > RTE_LEN2MASK(size * CHAR_BIT))
return -1;
?
Konstantin
Ok, I will commit v2.
switch (size) {
--
2.7.5
Wei Zhao
2018-12-06 02:38:06 UTC
Permalink
There is need to add boundary for input number from commandline,
If it beyond the defination, code will return error.

Signed-off-by: Wei Zhao <***@intel.com>

---

v2:
change mask writing format.
---
app/test-pmd/cmdline_flow.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 23ea7cc..8b7a5c0 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -4325,6 +4325,8 @@ parse_int(struct context *ctx, const struct token *token,
}
buf = (uint8_t *)ctx->object + arg->offset;
size = arg->size;
+ if (u > RTE_LEN2MASK(size * CHAR_BIT, uint64_t))
+ return -1;
objmask:
switch (size) {
case sizeof(uint8_t):
--
2.7.5
Loading...