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

Xueming Li xuemingl at nvidia.com
Tue Jun 21 10:02:05 CEST 2022


Hi,

FYI, your patch has been queued to stable release 20.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/23/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/steevenlee/dpdk

This queued commit can be viewed at:
https://github.com/steevenlee/dpdk/commit/52822a9dd80a3d9bfb1fbc7103a0661d6b1dde6d

Thanks.

Xueming Li <xuemingl at nvidia.com>

---
>From 52822a9dd80a3d9bfb1fbc7103a0661d6b1dde6d 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
Cc: Xueming Li <xuemingl at nvidia.com>

[ 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 6c29e1c49a..1a4b10d728 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.35.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-06-21 15:37:51.994924532 +0800
+++ 0059-rib-fix-traversal-with-32-route.patch	2022-06-21 15:37:49.077784727 +0800
@@ -1 +1 @@
-From 1b984e98a3fd00e607ec14b8b9299a2f14698dc3 Mon Sep 17 00:00:00 2001
+From 52822a9dd80a3d9bfb1fbc7103a0661d6b1dde6d Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl at nvidia.com>
+
+[ upstream commit 1b984e98a3fd00e607ec14b8b9299a2f14698dc3 ]
@@ -13 +15,0 @@
-Cc: stable at dpdk.org
@@ -18 +20 @@
- lib/rib/rte_rib.c | 2 ++
+ lib/librte_rib/rte_rib.c | 2 ++
@@ -21,5 +23,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 6c29e1c49a..1a4b10d728 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