mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 14:34:22 +00:00
2005-05-19 Paul Jakma <paul.jakma@sun.com>
* ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug a less serious one. 1: this function is supposed to lookup entries in the oifs ospf_interface route_table and return either an existing oi or NULL to indicate not found, its caller depends on this, yet this function uses route_node_get which /always/ returns a route_node - one is created if none exists. Use route_node_lookup instead. This should fix root cause of the reports of the (ospf_add_to_if) assert being hit. 2: oi's are inserted into this table with prefixlength set to /32 (indeed, it should be a hash table, not a route_table), however prefixlength to lookup was not changed, if no valid entry can be inserted other than /32, then nothng but /32 should be looked up. This possibly only worked by fluke.. Fix confirmed by 2 reporters (one list, one IRC), definitely a backport candidate once it has been incubated in HEAD for a while. Thanks to Patrick Friedel and Ivan Warren for testing.
This commit is contained in:
parent
024a7f0697
commit
a3387a4488
@ -1,3 +1,23 @@
|
|||||||
|
2005-05-19 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
|
* ospf_interface.c: (ospf_if_table_lookup) Fix a serious bug
|
||||||
|
a less serious one.
|
||||||
|
1: this function is supposed to lookup
|
||||||
|
entries in the oifs ospf_interface route_table and return either
|
||||||
|
an existing oi or NULL to indicate not found, its caller depends
|
||||||
|
on this, yet this function uses route_node_get which /always/
|
||||||
|
returns a route_node - one is created if none exists. Use
|
||||||
|
route_node_lookup instead. This should fix root cause of the
|
||||||
|
reports of the (ospf_add_to_if) assert being hit.
|
||||||
|
2: oi's are inserted into this table with prefixlength set to
|
||||||
|
/32 (indeed, it should be a hash table, not a route_table),
|
||||||
|
however prefixlength to lookup was not changed, if no valid entry
|
||||||
|
can be inserted other than /32, then nothng but /32 should be
|
||||||
|
looked up. This possibly only worked by fluke..
|
||||||
|
Fix confirmed by 2 reporters (one list, one IRC), definitely a
|
||||||
|
backport candidate once it has been incubated in HEAD for a while.
|
||||||
|
Thanks to Patrick Friedel and Ivan Warren for testing.
|
||||||
|
|
||||||
2005-05-11 Paul Jakma <paul.jakma@sun.com>
|
2005-05-11 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
* (general) Fix memory leaks in opaque AS-scope LSAs, reported and
|
* (general) Fix memory leaks in opaque AS-scope LSAs, reported and
|
||||||
|
@ -150,14 +150,18 @@ ospf_if_table_lookup (struct interface *ifp, struct prefix *prefix)
|
|||||||
{
|
{
|
||||||
struct prefix p;
|
struct prefix p;
|
||||||
struct route_node *rn;
|
struct route_node *rn;
|
||||||
struct ospf_interface *rninfo;
|
struct ospf_interface *rninfo = NULL;
|
||||||
|
|
||||||
p = *prefix;
|
p = *prefix;
|
||||||
|
p.prefixlen = IPV4_MAX_PREFIXLEN;
|
||||||
|
|
||||||
rn = route_node_get (IF_OIFS (ifp), &p);
|
|
||||||
/* route_node_get implicitely locks */
|
/* route_node_get implicitely locks */
|
||||||
|
if (rn = route_node_lookup (IF_OIFS (ifp), &p))
|
||||||
|
{
|
||||||
rninfo = (struct ospf_interface *) rn->info;
|
rninfo = (struct ospf_interface *) rn->info;
|
||||||
route_unlock_node (rn);
|
route_unlock_node (rn);
|
||||||
|
}
|
||||||
|
|
||||||
return rninfo;
|
return rninfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user