From: Vincent Bernat Date: Tue, 10 Jul 2012 07:27:57 +0000 (+0200) Subject: ospf6d: fix segfault when requesting inexistant interfaces or areas X-Git-Tag: frr-2.0-rc1~1796^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=0402ca4e92fa0904d5ee0926482ebca08ffd5c81;p=mirror%2Ffrr.git ospf6d: fix segfault when requesting inexistant interfaces or areas --- diff --git a/ospf6d/ospf6_snmp.c b/ospf6d/ospf6_snmp.c index a42e57acf9..f8a3b9204f 100644 --- a/ospf6d/ospf6_snmp.c +++ b/ospf6d/ospf6_snmp.c @@ -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);