Restrict the number of nexthops for a route to the compiled-in
limit. Be careful with the zapi route struct's array of nexthops
too.
Signed-off-by: Mark Stapp <mstapp@nvidia.com>
(cherry picked from commit
1f7ab1a2cc2a7079c9dd2cb791fc6ba3b9c5a6aa)
}
struct nexthop_iter {
- int count;
+ uint32_t count;
bool blackhole;
};
args->errmsg, args->errmsg_len,
"Route cannot have blackhole and non-blackhole nexthops simultaneously");
return NB_ERR_VALIDATION;
+ } else if (iter.count > zebra_ecmp_count) {
+ snprintf(args->errmsg, args->errmsg_len,
+ "Route cannot have more than %d ECMP nexthops",
+ zebra_ecmp_count);
+ return NB_ERR_VALIDATION;
}
break;
case NB_EV_PREPARE:
api.tableid = pn->table_id;
}
frr_each(static_nexthop_list, &pn->nexthop_list, nh) {
+ /* Don't overrun the nexthop array */
+ if (nh_num == zebra_ecmp_count)
+ break;
+
api_nh = &api.nexthops[nh_num];
if (nh->nh_vrf_id == VRF_UNKNOWN)
continue;