freebsd-dev/sys/contrib/dpdk_rte_lpm
Alexander V. Chernikov 36e15b717e routing: Fix crashes with dpdk_lpm[46] algo.
When a prefix gets deleted from the RIB, dpdk_lpm algo needs to know
 the nexthop of the "parent" prefix to update its internal state.
The glue code, which utilises RIB as a backing route store, uses
 fib[46]_lookup_rt() for the prefix destination after its deletion
 to fetch the desired nexthop.
This approach does not work when deleting less-specific prefixes
 with most-specific ones are still present. For example, if
 10.0.0.0/24, 10.0.0.0/23 and 10.0.0.0/22 exist in RIB, deleting
 10.0.0.0/23 would result in 10.0.0.0/24 being returned as a search
 result instead of 10.0.0.0/22. This, in turn, results in the failed
 datastructure update: part of the deleted /23 prefix will still
 contain the reference to an old nexthop. This leads to the
 use-after-free behaviour, ending with the eventual crashes.

Fix the logic flaw by properly fetching the prefix "parent" via
 newly-created rt_get_inet[6]_parent() helpers.

Differential Revision: https://reviews.freebsd.org/D31546
PR:	256882,256833
MFC after:	1 week
2021-08-17 20:46:22 +00:00
..
dpdk_lpm6.c routing: Fix crashes with dpdk_lpm[46] algo. 2021-08-17 20:46:22 +00:00
dpdk_lpm6.h
dpdk_lpm.c routing: Fix crashes with dpdk_lpm[46] algo. 2021-08-17 20:46:22 +00:00
rte_branch_prediction.h
rte_common.h
rte_debug.h
rte_jhash.h
rte_log.h
rte_lpm6.c
rte_lpm6.h
rte_lpm.c
rte_lpm.h
rte_shim.h
rte_tailq.h