patch 'rib: fix traversal with /32 route' has been queued to stable release 19.11.13

christian.ehrhardt at canonical.com christian.ehrhardt at canonical.com
Thu Jul 7 09:54:23 CEST 2022


Hi,

FYI, your patch has been queued to stable release 19.11.13

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 07/09/22. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/cpaelzer/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/cpaelzer/dpdk-stable-queue/commit/ec69d489241a77d433218fb0c0692fe19b8899d3

Thanks.

Christian Ehrhardt <christian.ehrhardt at canonical.com>

---
>From ec69d489241a77d433218fb0c0692fe19b8899d3 Mon Sep 17 00:00:00 2001
From: Stephen Hemminger <stephen at networkplumber.org>
Date: Thu, 14 Apr 2022 13:01:04 -0700
Subject: [PATCH] rib: fix traversal with /32 route

[ upstream commit 1b984e98a3fd00e607ec14b8b9299a2f14698dc3 ]

If a /32 route is entered in the RIB the code to traverse
will not see end of the tree. This is due to trying
to do a negative shift which is an undefined in C.

Fix by checking for max depth as is already done in rib6.

Fixes: 5a5793a5ffa2 ("rib: add RIB library")

Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
Acked-by: Vladimir Medvedkin <vladimir.medvedkin at intel.com>
---
 lib/librte_rib/rte_rib.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c
index 07b3c068ed..b502317f93 100644
--- a/lib/librte_rib/rte_rib.c
+++ b/lib/librte_rib/rte_rib.c
@@ -73,6 +73,8 @@ is_covered(uint32_t ip1, uint32_t ip2, uint8_t depth)
 static inline struct rte_rib_node *
 get_nxt_node(struct rte_rib_node *node, uint32_t ip)
 {
+	if (node->depth == RIB_MAXDEPTH)
+		return NULL;
 	return (ip & (1 << (31 - node->depth))) ? node->right : node->left;
 }
 
-- 
2.37.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-07-07 09:54:12.401403657 +0200
+++ 0028-rib-fix-traversal-with-32-route.patch	2022-07-07 09:54:10.841823851 +0200
@@ -1 +1 @@
-From 1b984e98a3fd00e607ec14b8b9299a2f14698dc3 Mon Sep 17 00:00:00 2001
+From ec69d489241a77d433218fb0c0692fe19b8899d3 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 1b984e98a3fd00e607ec14b8b9299a2f14698dc3 ]
+
@@ -13 +14,0 @@
-Cc: stable at dpdk.org
@@ -18 +19 @@
- lib/rib/rte_rib.c | 2 ++
+ lib/librte_rib/rte_rib.c | 2 ++
@@ -21,5 +22,5 @@
-diff --git a/lib/rib/rte_rib.c b/lib/rib/rte_rib.c
-index cd9e823068..0603980cab 100644
---- a/lib/rib/rte_rib.c
-+++ b/lib/rib/rte_rib.c
-@@ -71,6 +71,8 @@ is_covered(uint32_t ip1, uint32_t ip2, uint8_t depth)
+diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c
+index 07b3c068ed..b502317f93 100644
+--- a/lib/librte_rib/rte_rib.c
++++ b/lib/librte_rib/rte_rib.c
+@@ -73,6 +73,8 @@ is_covered(uint32_t ip1, uint32_t ip2, uint8_t depth)


More information about the stable mailing list