OpenSM crashes in case of ucast_cache usage, but the bug itself is in discovery
logic.
Consider the following scenario:
- SM is running
- SM gets some trap (let's say link state change)
- SM starts heavy sweep
- switch X discovered: setting p_sw->need_update to 2
- while still in heavy sweep, more traps received
- heavy sweep done (note: just the heavy sweep, w/o other stages, such as ucast
manager)
- there were traps, hence new heavy sweep started immediately
- p_sw->need_update field of all switches is reset to default value of 1, which
is also done for switch X
- heavy sweep completed
- proceeding to next stages ...
As a result, we get newly discovered switch X w/o configuration of LFT or other
fields, but also w/o indication that this is a new switch, because p_sw->need_up
date field was reset.
Signed-off-by: Yevgeny Kliteynik <kliteyn@xxxxxxxxxxxxxx>
Signed-off-by: Hal Rosenstock <hal@xxxxxxxxxxxx>
Signed-off-by: Vladimir Koushnir <vladimirk@xxxxxxxxxxxx>
Signed-off-by: Alex Netes <alexne@xxxxxxxxxxxx>
---
opensm/osm_state_mgr.c | 3 ++-
opensm/osm_ucast_mgr.c | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/opensm/osm_state_mgr.c b/opensm/osm_state_mgr.c
index 2629fc5..6de11aa 100644
--- a/opensm/osm_state_mgr.c
+++ b/opensm/osm_state_mgr.c
@@ -108,7 +108,8 @@ static void state_mgr_reset_switch_count(IN cl_map_item_t * p_map_item,
{
osm_switch_t *p_sw = (osm_switch_t *) p_map_item;
- p_sw->need_update = 1;
+ if (p_sw->max_lid_ho != 0)
+ p_sw->need_update = 1;
}
static void state_mgr_get_sw_info(IN cl_map_item_t * p_object, IN void *context)
diff --git a/opensm/osm_ucast_mgr.c b/opensm/osm_ucast_mgr.c
index b850009..2f37eba 100644
--- a/opensm/osm_ucast_mgr.c
+++ b/opensm/osm_ucast_mgr.c
@@ -905,7 +905,7 @@ static void ucast_mgr_set_fwd_top(IN cl_map_item_t * p_map_item,
OSM_LOG_ENTER(p_mgr->p_log);
- CL_ASSERT(p_sw);
+ CL_ASSERT(p_sw && p_sw->max_lid_ho);
p_node = p_sw->p_node;
--
1.7.8.2
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Home]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]
[Devices]