Check IP adj_index to make sure it is valid to prevent possible crash 14/1014/2
authorJohn Lo <loj@cisco.com>
Thu, 5 May 2016 23:55:13 +0000 (19:55 -0400)
committerDave Barach <openvpp@barachs.net>
Fri, 6 May 2016 04:55:13 +0000 (04:55 +0000)
Change-Id: I439aac05638fd40e314bec8756e42a32c436321c
Signed-off-by: John Lo <loj@cisco.com>
vnet/vnet/ip/ip4_forward.c
vnet/vnet/ip/ip6_forward.c

index 63bc0ed..a50664c 100644 (file)
@@ -242,7 +242,9 @@ void ip4_add_del_route (ip4_main_t * im, ip4_add_del_route_args_t * a)
   old_adj_index = fib->old_hash_values[0];
 
   /* Avoid spurious reference count increments */
-  if (old_adj_index == adj_index && !(a->flags & IP4_ROUTE_FLAG_KEEP_OLD_ADJACENCY))
+  if (old_adj_index == adj_index
+      && adj_index != ~0
+      && !(a->flags & IP4_ROUTE_FLAG_KEEP_OLD_ADJACENCY))
     {
       ip_adjacency_t * adj = ip_get_adjacency (lm, adj_index);
       if (adj->share_count > 0)
index e57269a..e82e0a6 100644 (file)
@@ -271,7 +271,9 @@ void ip6_add_del_route (ip6_main_t * im, ip6_add_del_route_args_t * a)
     }
 
   /* Avoid spurious reference count increments */
-  if (old_adj_index == adj_index && !(a->flags & IP6_ROUTE_FLAG_KEEP_OLD_ADJACENCY))
+  if (old_adj_index == adj_index 
+      && adj_index != ~0
+      && !(a->flags & IP6_ROUTE_FLAG_KEEP_OLD_ADJACENCY))
     {
       ip_adjacency_t * adj = ip_get_adjacency (lm, adj_index);
       if (adj->share_count > 0)