]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospf6d: fix segfault when requesting inexistant interfaces or areas
authorVincent Bernat <bernat@luffy.cx>
Tue, 10 Jul 2012 07:27:57 +0000 (09:27 +0200)
committerVincent Bernat <bernat@luffy.cx>
Tue, 10 Jul 2012 07:27:57 +0000 (09:27 +0200)
ospf6d/ospf6_snmp.c

index a42e57acf9dd30476954deb9d12908b81da05744..f8a3b9204f9af4768f81fb66fc48a3fd4601c586 100644 (file)
@@ -708,12 +708,13 @@ ospfv3WwLsdbEntry (struct variable *v, oid *name, size_t *length,
       else if (v->magic & OSPFv3WWAREATABLE)
         {
           oa = ospf6_area_lookup (area_id, ospf6);
+          if (!oa) return NULL;
           lsa = ospf6_lsdb_lookup (type, id, adv_router, oa->lsdb);
         }
       else if (v->magic & OSPFv3WWLINKTABLE)
         {
           oi = ospf6_interface_lookup_by_ifindex (ifindex);
-          if (oi->instance_id != instid) return NULL;
+          if (!oi || oi->instance_id != instid) return NULL;
           lsa = ospf6_lsdb_lookup (type, id, adv_router, oi->lsdb);
         }
     }
@@ -875,7 +876,7 @@ ospfv3IfEntry (struct variable *v, oid *name, size_t *length,
   if (exact)
     {
       oi = ospf6_interface_lookup_by_ifindex (ifindex);
-      if (oi->instance_id != instid) return NULL;
+      if (!oi || oi->instance_id != instid) return NULL;
     }
   else
     {
@@ -1034,8 +1035,8 @@ ospfv3NbrEntry (struct variable *v, oid *name, size_t *length,
   if (exact)
     {
       oi = ospf6_interface_lookup_by_ifindex (ifindex);
+      if (!oi || oi->instance_id != instid) return NULL;
       on = ospf6_neighbor_lookup (rtrid, oi);
-      if (oi->instance_id != instid) return NULL;
     }
   else
     {
@@ -1060,7 +1061,8 @@ ospfv3NbrEntry (struct variable *v, oid *name, size_t *length,
               break;
           }
           if (on) break;
-          oi = on = NULL;
+          oi = NULL;
+          on = NULL;
         }
 
       list_delete_all_node (ifslist);