[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.
This commit is contained in:
Paul Jakma 2006-06-15 12:04:57 +00:00
parent 88871b1d1e
commit ac904dec03
3 changed files with 43 additions and 2 deletions

View File

@ -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

View File

@ -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

View File

@ -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);