[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> 2006-05-30 Paul Jakma <paul.jakma@sun.com>
* ospf_packet.c: (ospf_read) Debug message about packets * 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; 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); old = ospf_lsdb_lookup (lsdb, lsa);
if (!old) if (!old)
@ -3014,9 +3025,15 @@ ospf_maxage_lsa_remover (struct thread *thread)
} }
/* Remove from lsdb. */ /* Remove from lsdb. */
if (lsa->lsdb)
{
ospf_discard_from_db (ospf, lsa->lsdb, lsa); ospf_discard_from_db (ospf, lsa->lsdb, lsa);
ospf_lsdb_delete (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 /* A MaxAge LSA must be removed immediately from the router's link
state database as soon as both a) it is no longer contained on any state database as soon as both a) it is no longer contained on any

View File

@ -127,6 +127,22 @@ ospf_lsdb_delete (struct ospf_lsdb *lsdb, struct ospf_lsa *lsa)
struct prefix_ls lp; struct prefix_ls lp;
struct route_node *rn; 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; table = lsdb->type[lsa->data->type].db;
lsdb_prefix_set (&lp, lsa); lsdb_prefix_set (&lp, lsa);
rn = route_node_lookup (table, (struct prefix *) &lp); rn = route_node_lookup (table, (struct prefix *) &lp);