Hi Hal,
The lower block of pkey tables' 'blocks' vector may be not initialized
due to lost MADs. We need to check it for NULL. Some duplicated code
removal as well.
Signed-off-by: Sasha Khapyorsky <[EMAIL PROTECTED]>
---
osm/opensm/osm_pkey.c | 33 +++++++++++----------------------
1 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/osm/opensm/osm_pkey.c b/osm/opensm/osm_pkey.c
index 8166c90..caefe18 100644
--- a/osm/opensm/osm_pkey.c
+++ b/osm/opensm/osm_pkey.c
@@ -76,16 +76,19 @@ void osm_pkey_tbl_construct(
void osm_pkey_tbl_destroy(
IN osm_pkey_tbl_t *p_pkey_tbl)
{
+ ib_pkey_table_t *p_block;
uint16_t num_blocks, i;
num_blocks = (uint16_t)(cl_ptr_vector_get_size( &p_pkey_tbl->blocks ));
for (i = 0; i < num_blocks; i++)
- free(cl_ptr_vector_get( &p_pkey_tbl->blocks, i ));
+ if ((p_block = cl_ptr_vector_get( &p_pkey_tbl->blocks, i )))
+ free(p_block);
cl_ptr_vector_destroy( &p_pkey_tbl->blocks );
num_blocks = (uint16_t)(cl_ptr_vector_get_size( &p_pkey_tbl->new_blocks ));
for (i = 0; i < num_blocks; i++)
- free(cl_ptr_vector_get( &p_pkey_tbl->new_blocks, i ));
+ if ((p_block = cl_ptr_vector_get( &p_pkey_tbl->new_blocks, i )))
+ free(p_block);
cl_ptr_vector_destroy( &p_pkey_tbl->new_blocks );
cl_map_remove_all( &p_pkey_tbl->keys );
@@ -112,26 +115,12 @@ osm_pkey_tbl_init(
void osm_pkey_tbl_init_new_blocks(
IN const osm_pkey_tbl_t *p_pkey_tbl)
{
- ib_pkey_table_t *p_block, *p_new_block;
- int16_t b, num_blocks, new_blocks;
+ ib_pkey_table_t *p_block;
+ int16_t b, num_blocks = cl_ptr_vector_get_size(&p_pkey_tbl->new_blocks);
- num_blocks = cl_ptr_vector_get_size(&p_pkey_tbl->blocks);
- new_blocks = cl_ptr_vector_get_size(&p_pkey_tbl->new_blocks);
-
- for (b = 0; b < num_blocks; b++) {
- p_block = cl_ptr_vector_get(&p_pkey_tbl->blocks, b);
- if ( b < new_blocks )
- p_new_block = cl_ptr_vector_get(&p_pkey_tbl->new_blocks, b);
- else
- {
- p_new_block = (ib_pkey_table_t *)malloc(sizeof(*p_new_block));
- if (!p_new_block)
- break;
- cl_ptr_vector_set(&((osm_pkey_tbl_t *)p_pkey_tbl)->new_blocks,
- b, p_new_block);
- }
- memset(p_new_block, 0, sizeof(*p_new_block));
- }
+ for (b = 0; b < num_blocks; b++)
+ if ((p_block = cl_ptr_vector_get(&p_pkey_tbl->new_blocks, b)))
+ memset(p_block, 0, sizeof(*p_block));
}
/**********************************************************************
@@ -296,7 +285,7 @@ osm_pkey_find_next_free_entry(
OUT uint8_t *p_pkey_idx)
{
ib_pkey_table_t *p_new_block;
-
+
CL_ASSERT(p_block_idx);
CL_ASSERT(p_pkey_idx);
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general