diff options
-rw-r--r-- | src/vnet/adj/adj.c | 4 | ||||
-rw-r--r-- | src/vnet/adj/adj.h | 8 | ||||
-rw-r--r-- | src/vnet/adj/adj_mcast.c | 7 | ||||
-rw-r--r-- | src/vnet/ip/lookup.c | 7 |
4 files changed, 23 insertions, 3 deletions
diff --git a/src/vnet/adj/adj.c b/src/vnet/adj/adj.c index bafa33618cb..0966d97cc6d 100644 --- a/src/vnet/adj/adj.c +++ b/src/vnet/adj/adj.c @@ -139,6 +139,10 @@ format_ip_adjacency (u8 * s, va_list * args) adj_index = va_arg (*args, u32); fiaf = va_arg (*args, format_ip_adjacency_flags_t); + + if (!adj_is_valid(adj_index)) + return format(s, "<invalid adjacency>"); + adj = adj_get(adj_index); switch (adj->lookup_next_index) diff --git a/src/vnet/adj/adj.h b/src/vnet/adj/adj.h index fb3dc368db0..4c38b041b61 100644 --- a/src/vnet/adj/adj.h +++ b/src/vnet/adj/adj.h @@ -432,7 +432,13 @@ extern int adj_per_adj_counters; static inline ip_adjacency_t * adj_get (adj_index_t adj_index) { - return (vec_elt_at_index(adj_pool, adj_index)); + return (pool_elt_at_index(adj_pool, adj_index)); +} + +static inline int +adj_is_valid(adj_index_t adj_index) +{ + return !(pool_is_free_index(adj_pool, adj_index)); } /** diff --git a/src/vnet/adj/adj_mcast.c b/src/vnet/adj/adj_mcast.c index 4454afec630..c94d28e8713 100644 --- a/src/vnet/adj/adj_mcast.c +++ b/src/vnet/adj/adj_mcast.c @@ -329,7 +329,12 @@ format_adj_mcast (u8* s, va_list *ap) { index_t index = va_arg(*ap, index_t); CLIB_UNUSED(u32 indent) = va_arg(*ap, u32); - ip_adjacency_t * adj = adj_get(index); + ip_adjacency_t * adj; + + if (!adj_is_valid(index)) + return format(s, "<invalid adjacency>"); + + adj = adj_get(index); s = format(s, "%U-mcast: ", format_fib_protocol, adj->ia_nh_proto); diff --git a/src/vnet/ip/lookup.c b/src/vnet/ip/lookup.c index 60cedac57d8..43d61d39ee0 100644 --- a/src/vnet/ip/lookup.c +++ b/src/vnet/ip/lookup.c @@ -261,7 +261,12 @@ format_ip_adjacency_packet_data (u8 * s, va_list * args) u32 adj_index = va_arg (*args, u32); u8 *packet_data = va_arg (*args, u8 *); u32 n_packet_data_bytes = va_arg (*args, u32); - ip_adjacency_t *adj = adj_get (adj_index); + ip_adjacency_t *adj; + + if (!adj_is_valid (adj_index)) + return format (s, "<invalid adjacency>"); + + adj = adj_get (adj_index); switch (adj->lookup_next_index) { |