diff options
-rw-r--r-- | ospfd/ChangeLog | 8 | ||||
-rw-r--r-- | ospfd/ospf_lsa.c | 21 | ||||
-rw-r--r-- | ospfd/ospf_lsdb.c | 16 |
3 files changed, 43 insertions, 2 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 32b39aae..34d7c4df 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,3 +1,11 @@ +2006-05-31 Paul Jakma <paul.jakma@sun.com> + + * ospf_lsdb.c: (ospf_lsdb_delete) robustify against NULL arguments, + print warning. + * ospf_lsa.c: (ospf_discard_from_db) ditto. + (ospf_maxage_lsa_remover) Check lsa->lsdb for validity, possible + mitigation (but not solution) for bug #269. + 2006-05-30 Paul Jakma <paul.jakma@sun.com> * ospf_packet.c: (ospf_read) Debug message about packets diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index 7c3be3d6..a0afbad3 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -2679,6 +2679,17 @@ ospf_discard_from_db (struct ospf *ospf, { struct ospf_lsa *old; + if (!lsdb) + { + zlog_warn ("%s: Called with NULL lsdb!", __func__); + if (!lsa) + zlog_warn ("%s: and NULL LSA!", __func__); + else + zlog_warn ("LSA[Type%d:%s]: not associated with LSDB!", + lsa->data->type, inet_ntoa (lsa->data->id)); + return; + } + old = ospf_lsdb_lookup (lsdb, lsa); if (!old) @@ -3014,8 +3025,14 @@ ospf_maxage_lsa_remover (struct thread *thread) } /* Remove from lsdb. */ - ospf_discard_from_db (ospf, lsa->lsdb, lsa); - ospf_lsdb_delete (lsa->lsdb, lsa); + if (lsa->lsdb) + { + ospf_discard_from_db (ospf, lsa->lsdb, lsa); + ospf_lsdb_delete (lsa->lsdb, lsa); + } + else + zlog_warn ("%s: LSA[Type%d:%s]: No associated LSDB!", __func__, + lsa->data->type, inet_ntoa (lsa->data->id)); } /* A MaxAge LSA must be removed immediately from the router's link diff --git a/ospfd/ospf_lsdb.c b/ospfd/ospf_lsdb.c index c0ec4b3d..b161b806 100644 --- a/ospfd/ospf_lsdb.c +++ b/ospfd/ospf_lsdb.c @@ -127,6 +127,22 @@ ospf_lsdb_delete (struct ospf_lsdb *lsdb, struct ospf_lsa *lsa) struct prefix_ls lp; struct route_node *rn; + if (!lsdb) + { + zlog_warn ("%s: Called with NULL LSDB", __func__); + if (lsa) + zlog_warn ("LSA[Type%d:%s]: LSA %p, lsa->lsdb %p", + lsa->data->type, inet_ntoa (lsa->data->id), + lsa, lsa->lsdb); + return; + } + + if (!lsa) + { + zlog_warn ("%s: Called with NULL LSA", __func__); + return; + } + table = lsdb->type[lsa->data->type].db; lsdb_prefix_set (&lp, lsa); rn = route_node_lookup (table, (struct prefix *) &lp); |