[ospfd] lsdb_delete/discard_from_db should be more robust to bad args
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.
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 32b39aa..34d7c4d 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 7c3be3d..a0afbad 100644
--- a/ospfd/ospf_lsa.c
+++ b/ospfd/ospf_lsa.c
@@ -2679,6 +2679,17 @@
{
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 @@
}
/* 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 c0ec4b3..b161b80 100644
--- a/ospfd/ospf_lsdb.c
+++ b/ospfd/ospf_lsdb.c
@@ -127,6 +127,22 @@
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);