[ofa-general] [PATCH] opensm/osm_ucast_lash: fix buffer overflow

Sasha Khapyorsky sashak at voltaire.com
Tue Oct 7 18:21:49 PDT 2008


Lash first overflows its buffer and then check for the size (based on
number VLs used). Fix the check order.

Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
---
 opensm/opensm/osm_ucast_lash.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/opensm/opensm/osm_ucast_lash.c b/opensm/opensm/osm_ucast_lash.c
index ce3982f..03cfc1f 100644
--- a/opensm/opensm/osm_ucast_lash.c
+++ b/opensm/opensm/osm_ucast_lash.c
@@ -979,6 +979,12 @@ static int lash_core(lash_t * p_lash)
 				switches[dest_switch]->routing_table[i].lane = v_lane;
 
 				if (cycle_found == 1 || cycle_found2 == 1) {
+					if (lanes_needed + 1 > p_lash->vl_min) {
+						lanes_needed++;
+						goto Error_Not_Enough_Lanes;
+					} else
+						lanes_needed++;
+
 					generate_cdg_for_sp(p_lash, i, dest_switch, v_lane);
 					generate_cdg_for_sp(p_lash, dest_switch, i, v_lane);
 
@@ -987,13 +993,6 @@ static int lash_core(lash_t * p_lash)
 					set_temp_depend_to_permanent_for_sp(p_lash, dest_switch, i,
 									    v_lane);
 
-					if (lanes_needed + 1 > p_lash->vl_min) {
-						lanes_needed++;
-						goto Error_Not_Enough_Lanes;
-					} else
-						lanes_needed++;
-
-					// goto error exit with message
 					p_lash->num_mst_in_lane[v_lane]++;
 					p_lash->num_mst_in_lane[v_lane]++;
 				}
-- 
1.6.0.1.196.g01914




More information about the general mailing list