36e15b717e
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 |
||
---|---|---|
.. | ||
dpdk_lpm6.c | ||
dpdk_lpm6.h | ||
dpdk_lpm.c | ||
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 |