* [dpdk-dev] [PATCH v3 1/2] lib/lpm:fix an issue of condition check in delete_depth_small()
2015-11-03 2:17 [dpdk-dev] [PATCH v3 0/2] Fix two issues in lpm Na Na
@ 2015-11-03 2:17 ` Na Na
2015-11-03 2:17 ` [dpdk-dev] [PATCH v3 2/2] lib/lpm:fix incorrect reuse of already allocated tbl8 Na Na
2015-11-03 10:26 ` [dpdk-dev] [PATCH v3 0/2] Fix two issues in lpm Bruce Richardson
2 siblings, 0 replies; 5+ messages in thread
From: Na Na @ 2015-11-03 2:17 UTC (permalink / raw)
To: dev
Fixes an issue of check logic in delete_depth_small function.
For a tbl24 entry, the 'ext_entry' field indicates whether we need to use tbl8_gindex to read the next_hop from a tbl8 entry, or whether it can be read directly from this entry.
If a route is deleted, the prefix of previous route is used to override the deleted route.
When checking the depth of the previous route the conditional checks both the ext_entry and the depth, but the "else" leg fails to take account that the condition could fail for one of two possible reasons, leading to an incorrect flow when 'ext_entry == 0' is true , but 'lpm->tbl24[i].depth > depth' is false. The fix here is to add a condition check to the else leg so that it only executes when ext_entry is set.
Signed-off-by: Na Na <nana.nn@alibaba-inc.com>
---
lib/librte_lpm/rte_lpm.c | 6 ++----
1 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/librte_lpm/rte_lpm.c b/lib/librte_lpm/rte_lpm.c
index 163ba3c..57ec2f0 100644
--- a/lib/librte_lpm/rte_lpm.c
+++ b/lib/librte_lpm/rte_lpm.c
@@ -734,8 +734,7 @@ delete_depth_small(struct rte_lpm *lpm, uint32_t ip_masked,
if (lpm->tbl24[i].ext_entry == 0 &&
lpm->tbl24[i].depth <= depth ) {
lpm->tbl24[i].valid = INVALID;
- }
- else {
+ } else if (lpm->tbl24[i].ext_entry == 1) {
/*
* If TBL24 entry is extended, then there has
* to be a rule with depth >= 25 in the
@@ -780,8 +779,7 @@ delete_depth_small(struct rte_lpm *lpm, uint32_t ip_masked,
if (lpm->tbl24[i].ext_entry == 0 &&
lpm->tbl24[i].depth <= depth ) {
lpm->tbl24[i] = new_tbl24_entry;
- }
- else {
+ } else if (lpm->tbl24[i].ext_entry == 1) {
/*
* If TBL24 entry is extended, then there has
* to be a rule with depth >= 25 in the
--
1.7.7.6
^ permalink raw reply [flat|nested] 5+ messages in thread
* [dpdk-dev] [PATCH v3 2/2] lib/lpm:fix incorrect reuse of already allocated tbl8
2015-11-03 2:17 [dpdk-dev] [PATCH v3 0/2] Fix two issues in lpm Na Na
2015-11-03 2:17 ` [dpdk-dev] [PATCH v3 1/2] lib/lpm:fix an issue of condition check in delete_depth_small() Na Na
@ 2015-11-03 2:17 ` Na Na
2015-11-03 10:26 ` [dpdk-dev] [PATCH v3 0/2] Fix two issues in lpm Bruce Richardson
2 siblings, 0 replies; 5+ messages in thread
From: Na Na @ 2015-11-03 2:17 UTC (permalink / raw)
To: dev
Fixes an initialization issue of 'valid_group' in the delete_depth_small().
When adding an entry to a tbl8, the .valid_group field should always be set,
so that future adds do not accidently find and use this table, thinking it is
currently invalid, i.e. unused, and thereby overwrite existing entries.
Signed-off-by: Na Na <nana.nn@alibaba-inc.com>
---
lib/librte_lpm/rte_lpm.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/lib/librte_lpm/rte_lpm.c b/lib/librte_lpm/rte_lpm.c
index 57ec2f0..3981452 100644
--- a/lib/librte_lpm/rte_lpm.c
+++ b/lib/librte_lpm/rte_lpm.c
@@ -769,6 +769,7 @@ delete_depth_small(struct rte_lpm *lpm, uint32_t ip_masked,
struct rte_lpm_tbl8_entry new_tbl8_entry = {
.valid = VALID,
+ .valid_group = VALID,
.depth = sub_rule_depth,
.next_hop = lpm->rules_tbl
[sub_rule_index].next_hop,
--
1.7.7.6
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [dpdk-dev] [PATCH v3 0/2] Fix two issues in lpm
2015-11-03 2:17 [dpdk-dev] [PATCH v3 0/2] Fix two issues in lpm Na Na
2015-11-03 2:17 ` [dpdk-dev] [PATCH v3 1/2] lib/lpm:fix an issue of condition check in delete_depth_small() Na Na
2015-11-03 2:17 ` [dpdk-dev] [PATCH v3 2/2] lib/lpm:fix incorrect reuse of already allocated tbl8 Na Na
@ 2015-11-03 10:26 ` Bruce Richardson
2015-11-04 0:19 ` Thomas Monjalon
2 siblings, 1 reply; 5+ messages in thread
From: Bruce Richardson @ 2015-11-03 10:26 UTC (permalink / raw)
To: Na Na; +Cc: dev
On Tue, Nov 03, 2015 at 10:17:39AM +0800, Na Na wrote:
> Fixes two issues in the delete_depth_small() function.
>
> v3 changes:
> Change second issue description.
>
> v2 changes:
> Split a patch into two patches for two issues.
> Add more clear issue description.
>
>
> *** BLURB HERE ***
>
> Na Na (2):
> fix an issue of condition check in delete_depth_small().
> fix an initialization issue of valid_group in the delete_depth_small()
>
> lib/librte_lpm/rte_lpm.c | 7 +++----
> 1 files changed, 3 insertions(+), 4 deletions(-)
>
> --
> 1.7.7.6
>
Series Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [flat|nested] 5+ messages in thread