fib: fix adding default route overwriting entire table
Checks
Commit Message
When FIB contains any route covering last ip address
(255.255.255.255), upon adding a new default route
the entire fib table will be overwritten with corresponding
default route next hop.
Previous fix added check for ledge against 0 for case
if default route is added as a first route, however
this check was also erroneously triggered in case when
ledge was wrapped around the address space
(this would happen if FIB contains any route covering
last possible address - 255.255.255.255).
This fix prevents wrap around from happening.
Fixes: 880bc2b5f3bd ("fib: fix adding default route")
Cc: stable@dpdk.org
Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
lib/fib/dir24_8.c | 6 ++++++
1 file changed, 6 insertions(+)
Comments
02/10/2023 17:11, Vladimir Medvedkin:
> When FIB contains any route covering last ip address
> (255.255.255.255), upon adding a new default route
> the entire fib table will be overwritten with corresponding
> default route next hop.
>
> Previous fix added check for ledge against 0 for case
> if default route is added as a first route, however
> this check was also erroneously triggered in case when
> ledge was wrapped around the address space
> (this would happen if FIB contains any route covering
> last possible address - 255.255.255.255).
>
> This fix prevents wrap around from happening.
>
> Fixes: 880bc2b5f3bd ("fib: fix adding default route")
> Cc: stable@dpdk.org
>
> Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Applied, thanks.
@@ -388,6 +388,12 @@ modify_fib(struct dir24_8_tbl *dp, struct rte_rib *rib, uint32_t ip,
return ret;
ledge = redge +
(uint32_t)(1ULL << (32 - tmp_depth));
+ /*
+ * we got to the end of address space
+ * and wrapped around
+ */
+ if (ledge == 0)
+ break;
} else {
redge = ip + (uint32_t)(1ULL << (32 - depth));
if (ledge == redge && ledge != 0)