zebra: Prevent crash if ZEBRA_ROUTE_ALL is used for a route type

FRR will crash when the re->type is a ZEBRA_ROUTE_ALL and it
is inserted into the meta-queue.  Let's just put some basic
code in place to prevent a crash from happening.  No routing
protocol should be using ZEBRA_ROUTE_ALL as a value but
bugs do happen.  Let's just accept the weird route type
gracefully and move on.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2022-02-27 14:00:41 -05:00
parent 47ed380ba4
commit 16d91fce15

View file

@ -116,6 +116,7 @@ static const struct {
[ZEBRA_ROUTE_OPENFABRIC] = {ZEBRA_ROUTE_OPENFABRIC, 115, 5}, [ZEBRA_ROUTE_OPENFABRIC] = {ZEBRA_ROUTE_OPENFABRIC, 115, 5},
[ZEBRA_ROUTE_VRRP] = {ZEBRA_ROUTE_VRRP, 255, 7}, [ZEBRA_ROUTE_VRRP] = {ZEBRA_ROUTE_VRRP, 255, 7},
[ZEBRA_ROUTE_SRTE] = {ZEBRA_ROUTE_SRTE, 255, 7}, [ZEBRA_ROUTE_SRTE] = {ZEBRA_ROUTE_SRTE, 255, 7},
[ZEBRA_ROUTE_ALL] = {ZEBRA_ROUTE_ALL, 255, 7},
/* Any new route type added to zebra, should be mirrored here */ /* Any new route type added to zebra, should be mirrored here */
/* no entry/default: 150 */ /* no entry/default: 150 */
@ -4386,9 +4387,8 @@ static void check_route_info(void)
* ZEBRA_ROUTE_ALL is also ignored. * ZEBRA_ROUTE_ALL is also ignored.
*/ */
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
if (i == ZEBRA_ROUTE_SYSTEM || i == ZEBRA_ROUTE_ALL) assert(route_info[i].key >= ZEBRA_ROUTE_SYSTEM &&
continue; route_info[i].key < ZEBRA_ROUTE_MAX);
assert(route_info[i].key);
assert(route_info[i].meta_q_map < MQ_SIZE); assert(route_info[i].meta_q_map < MQ_SIZE);
} }
} }