Decode the SAPKeyTableRecord block number properly, and don't segv
* Properly byteswap block_num before using it
* Properly check bounds of the block number before de-referencing it.
This fixes a remotely triggered null pointer dereference.
--- opensm/include/iba/ib_types.h | 2 +- opensm/opensm/osm_sa_pkey_record.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-)
opensm/include/iba/ib_types.h +1 -1
@@ -6724,7 +6724,7 @@ typedef struct _ib_pkey_table {#include <complib/cl_packon.h> typedef struct _ib_pkey_table_record { ib_net16_t lid; // for CA: lid of port, for switch lid of port 0 - uint16_t block_num; + ib_net16_t block_num; uint8_t port_num; // for switch: port number, for CA: reserved uint8_t reserved1; uint16_t reserved2;
opensm/opensm/osm_sa_pkey_record.c +12 -4
@@ -71,6 +71,7 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp,osm_pkey_item_t *p_rec_item;uint16_t lid;ib_api_status_t status =IB_SUCCESS ; +ib_pkey_table_t *tbl;OSM_LOG_ENTER (sa->p_log);
@@ -98,8 +99,15 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num =osm_physp_get_port_num (p_physp); - p_rec_item->rec.pkey_tbl = - *(osm_pkey_tbl_block_get (osm_physp_get_pkey_tbl (p_physp), block)); +/* FIXME: There are ninf.PartitionCap or swinf.PartitionEnforcementCap +pkey entries so everything in that range is a valid block number +even if opensm is not using it. Return 0. However things outside +that range should return no entries.. Not sure how to figure that +here? The range of pkey_tbl can be less than the cap, so +this falsely triggers. */ + tbl =osm_pkey_tbl_block_get (osm_physp_get_pkey_tbl (p_physp), block); +if (tbl) + p_rec_item->rec.pkey_tbl = *tbl;cl_qlist_insert_tail (p_ctxt->p_list, &p_rec_item->list_item);
@@ -269,14 +277,14 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data) context.p_list = &rec_list; context.comp_mask = p_rcvd_mad->comp_mask; context.sa = sa; - context.block_num = p_rcvd_rec->block_num; + context.block_num =cl_ntoh16 (p_rcvd_rec->block_num); context.p_req_physp = p_req_physp;OSM_LOG (sa->p_log,OSM_LOG_DEBUG ,"Got Query Lid:%u(%02X), Block:0x%02X(%02X), Port:0x%02X(%02X)\n" ,cl_ntoh16 (p_rcvd_rec->lid), (comp_mask &IB_PKEY_COMPMASK_LID ) !=0 , p_rcvd_rec->port_num, - (comp_mask &IB_PKEY_COMPMASK_PORT ) !=0 , p_rcvd_rec->block_num, + (comp_mask &IB_PKEY_COMPMASK_PORT ) !=0 , context.block_num, (comp_mask &IB_PKEY_COMPMASK_BLOCK ) !=0 );cl_plock_acquire (sa->p_lock);
Signature · 6 lines
1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20110211221206.GA8532-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Hi Jason,
Quoted 14 lines · Jason Gunthorpe
* Properly byteswap
block_numbefore using it
* Properly check bounds of the block number before de-referencing it.This fixes a remotely triggered null pointer dereference.
--- opensm/include/iba/ib_types.h | 2 +- opensm/opensm/osm_sa_pkey_record.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-)opensm/include/iba/ib_types.h +0
-0
opensm/include/iba/ib_types.h typedef struct _ib_pkey_table { · line 6730
Quoted 8 lines
opensm/include/iba/ib_types.h +1
-1@@ -6724,7 +6724,7 @@ typedef struct _ib_pkey_table {#include <complib/cl_packon.h> typedef struct _ib_pkey_table_record { ib_net16_t lid; // for CA: lid of port, for switch lid of port 0 - uint16_t block_num; + ib_net16_t block_num; uint8_t port_num; // for switch: port number, for CA: reserved uint8_t reserved1; uint16_t reserved2;
I guess reserved2 could also be changed to ib_net16_t, right?
Quoted 19 lines
opensm/opensm/osm_sa_pkey_record.c +2
-2@@ -71,6 +71,7 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp,osm_pkey_item_t *p_rec_item;uint16_t lid;ib_api_status_t status =IB_SUCCESS ; +ib_pkey_table_t *tbl;OSM_LOG_ENTER (sa->p_log);@@ -98,8 +99,15 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num =osm_physp_get_port_num (p_physp); - p_rec_item->rec.pkey_tbl = - *(osm_pkey_tbl_block_get (osm_physp_get_pkey_tbl (p_physp), block)); +/* FIXME: There are ninf.PartitionCap or swinf.PartitionEnforcementCap
opensm/opensm/osm_sa_pkey_record.c static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, · line 112
Quoted 10 lines
opensm/opensm/osm_sa_pkey_record.c +8
-0+pkey entries so everything in that range is a valid block number +even if opensm is not using it. Return 0. However things outside +that range should return no entries.. Not sure how to figure that +here? The range of pkey_tbl can be less than the cap, so +this falsely triggers. */ + tbl =osm_pkey_tbl_block_get (osm_physp_get_pkey_tbl (p_physp), block); +if (tbl) + p_rec_item->rec.pkey_tbl = *tbl;cl_qlist_insert_tail (p_ctxt->p_list, &p_rec_item->list_item);
What is the expected behaviour when IB PKey table block is empty? rec.pkey_tbl might be uninitialized here.
Shouldn't SubnAdmGetResp contain ERR_NO_RECORDS in such case?
Quoted 21 lines
opensm/opensm/osm_sa_pkey_record.c +2
-2@@ -269,14 +277,14 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data) context.p_list = &rec_list; context.comp_mask = p_rcvd_mad->comp_mask; context.sa = sa; - context.block_num = p_rcvd_rec->block_num; + context.block_num =cl_ntoh16 (p_rcvd_rec->block_num); context.p_req_physp = p_req_physp;OSM_LOG (sa->p_log,OSM_LOG_DEBUG ,"Got Query Lid:%u(%02X), Block:0x%02X(%02X), Port:0x%02X(%02X)\n" ,cl_ntoh16 (p_rcvd_rec->lid), (comp_mask &IB_PKEY_COMPMASK_LID ) !=0 , p_rcvd_rec->port_num, - (comp_mask &IB_PKEY_COMPMASK_PORT ) !=0 , p_rcvd_rec->block_num, + (comp_mask &IB_PKEY_COMPMASK_PORT ) !=0 , context.block_num, (comp_mask &IB_PKEY_COMPMASK_BLOCK ) !=0 );cl_plock_acquire (sa->p_lock);Signature · 1 line
1.7.1
Alex
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20110223172019.GA8537-iQai9MGU/dyyaiaB+Ve85laTQe2KTcn/@public.gmane.org
Quoted 1 line · Alex Netes
I guess reserved2 could also be changed to
ib_net16_t, right?
Sure, but unrelated, might be lots more too?
Quoted 27 lines
Quoted 27 lines
opensm/opensm/osm_sa_pkey_record.c +11
-2+++ b/opensm/opensm/osm_sa_pkey_record.c@@ -71,6 +71,7 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp,osm_pkey_item_t *p_rec_item;uint16_t lid;ib_api_status_t status =IB_SUCCESS ; +ib_pkey_table_t *tbl;OSM_LOG_ENTER (sa->p_log);@@ -98,8 +99,15 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num =osm_physp_get_port_num (p_physp); - p_rec_item->rec.pkey_tbl = - *(osm_pkey_tbl_block_get (osm_physp_get_pkey_tbl (p_physp), block)); +/* FIXME: There are ninf.PartitionCap or swinf.PartitionEnforcementCap +pkey entries so everything in that range is a valid block number +even if opensm is not using it. Return 0. However things outside +that range should return no entries.. Not sure how to figure that +here? The range of pkey_tbl can be less than the cap, so +this falsely triggers. */ + tbl =osm_pkey_tbl_block_get (osm_physp_get_pkey_tbl (p_physp), block); +if (tbl) + p_rec_item->rec.pkey_tbl = *tbl;
Quoted 3 lines
opensm/opensm/osm_sa_pkey_record.c static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, · line 112
Quoted 1 line
opensm/opensm/osm_sa_pkey_record.c +0
-0cl_qlist_insert_tail (p_ctxt->p_list, &p_rec_item->list_item);What is the expected behaviour when IB PKey table block is empty?
IBA is unclear in this case. In my view, direct queries for SA records should return the same result as a direct SMP for the same data, so returning a wack of 0 is appropriate. Another view would be that the SA data is 'empty' so ERR_NO_RECORDS is OK, which matches what GetTable would return.
Quoted 1 line
rec.pkey_tbl might be uninitialized here.
All of p_rec_item is memset to 0.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 56 lines · Alex Netes
Hi Jason,
Quoted 16 lines · Jason Gunthorpe
* Properly byteswap
block_numbefore using it
* Properly check bounds of the block number before de-referencing it.This fixes a remotely triggered null pointer dereference.
---
opensm/include/iba/ib_types.h | 2 +-opensm/opensm/osm_sa_pkey_record.c| 16 ++++++++++++----2 files changed, 13 insertions(+), 5 deletions(-)opensm/include/iba/ib_types.h +0
-0@@ -6724,7 +6724,7 @@ typedef struct _ib_pkey_table { #include <complib/cl_packon.h> typedef struct _ib_pkey_table_record {Quoted 6 lines
ib_net16_tlid; // for CA: lid of port, for switch lid of port 0
-uint16_tblock_num;
+ib_net16_tblock_num;
uint8_tport_num; // for switch: port number, for CA: reserveduint8_treserved1;
uint16_treserved2;I guess reserved2 could also be changed to
ib_net16_t, right?Quoted 28 lines
opensm/opensm/osm_sa_pkey_record.c +10
-2@@ -71,6 +71,7 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, osm_pkey_item_t *p_rec_item; uint16_t lid; ib_api_status_t status = IB_SUCCESS; + ib_pkey_table_t *tbl; OSM_LOG_ENTER(sa->p_log);@@ -98,8 +99,15 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp); - p_rec_item->rec.pkey_tbl = - *(osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block)); + /* FIXME: There are ninf.PartitionCap or swinf.PartitionEnforcementCap + pkey entries so everything in that range is a valid block number + even if opensm is not using it. Return 0. However things outside + that range should return no entries.. Not sure how to figure that + here? The range of pkey_tbl can be less than the cap, so + this falsely triggers. */ + tbl = osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block); + if (tbl) + p_rec_item->rec.pkey_tbl = *tbl;
Quoted 5 lines
opensm/opensm/osm_sa_pkey_record.c static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, · line 112
Quoted 1 line
opensm/opensm/osm_sa_pkey_record.c +0
-0cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);What is the expected behaviour when IB PKey table block is empty? rec.pkey_tbl might be uninitialized here.
Shouldn't SubnAdmGetResp containERR_NO_RECORDSin such case?
It depends on the method used in the SA query. GetTable never returns ERR_NO_RECORDS whereas a Get can.
-- Hal
Quoted 17 lines
Quoted 17 lines
opensm/opensm/osm_sa_pkey_record.c +2
-2@@ -269,14 +277,14 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data) context.p_list = &rec_list; context.comp_mask = p_rcvd_mad->comp_mask; context.sa = sa; - context.block_num = p_rcvd_rec->block_num; + context.block_num = cl_ntoh16(p_rcvd_rec->block_num); context.p_req_physp = p_req_physp; OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Got Query Lid:%u(%02X), Block:0x%02X(%02X), Port:0x%02X(%02X)\n", cl_ntoh16(p_rcvd_rec->lid), (comp_mask & IB_PKEY_COMPMASK_LID) != 0, p_rcvd_rec->port_num, - (comp_mask & IB_PKEY_COMPMASK_PORT) != 0, p_rcvd_rec->block_num, + (comp_mask & IB_PKEY_COMPMASK_PORT) != 0, context.block_num, (comp_mask & IB_PKEY_COMPMASK_BLOCK) != 0);
Quoted 11 lines
Quoted 4 lines
opensm/opensm/osm_sa_pkey_record.c +0
-1cl_plock_acquire(sa->p_lock); --1.7.1
Alex
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): AANLkTinm5Uh-9h+WMh6O8dLsPr8wpdt0BJmOu3+Dt8vj-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Quoted 57 lines · Hal Rosenstock
Quoted 56 lines · Alex Netes
Hi Jason,
Quoted 16 lines · Jason Gunthorpe
* Properly byteswap
block_numbefore using it
* Properly check bounds of the block number before de-referencing it.This fixes a remotely triggered null pointer dereference.
---
opensm/include/iba/ib_types.h | 2 +-opensm/opensm/osm_sa_pkey_record.c| 16 ++++++++++++----2 files changed, 13 insertions(+), 5 deletions(-)opensm/include/iba/ib_types.h +0
-0@@ -6724,7 +6724,7 @@ typedef struct _ib_pkey_table { #include <complib/cl_packon.h> typedef struct _ib_pkey_table_record {Quoted 6 lines
ib_net16_tlid; // for CA: lid of port, for switch lid of port 0
-uint16_tblock_num;
+ib_net16_tblock_num;
uint8_tport_num; // for switch: port number, for CA: reserveduint8_treserved1;
uint16_treserved2;I guess reserved2 could also be changed to
ib_net16_t, right?Quoted 28 lines
opensm/opensm/osm_sa_pkey_record.c +10
-2@@ -71,6 +71,7 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, osm_pkey_item_t *p_rec_item; uint16_t lid; ib_api_status_t status = IB_SUCCESS; + ib_pkey_table_t *tbl; OSM_LOG_ENTER(sa->p_log);@@ -98,8 +99,15 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp); - p_rec_item->rec.pkey_tbl = - *(osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block)); + /* FIXME: There are ninf.PartitionCap or swinf.PartitionEnforcementCap + pkey entries so everything in that range is a valid block number + even if opensm is not using it. Return 0. However things outside + that range should return no entries.. Not sure how to figure that + here? The range of pkey_tbl can be less than the cap, so + this falsely triggers. */ + tbl = osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block); + if (tbl) + p_rec_item->rec.pkey_tbl = *tbl;
Quoted 8 lines
Quoted 5 lines
opensm/opensm/osm_sa_pkey_record.c static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, · line 112
Quoted 1 line
opensm/opensm/osm_sa_pkey_record.c +0
-0cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);What is the expected behaviour when IB PKey table block is empty? rec.pkey_tbl might be uninitialized here.
Shouldn't SubnAdmGetResp containERR_NO_RECORDSin such case?It depends on the method used in the SA query. GetTable never returns
ERR_NO_RECORDSwhereas a Get can.
I'm referring to a block that is fully above the PartitionCap in the above. For a block included by the PartitionCap, there's should always be a "valid" block to be returned even if the entries indicate invalid pkey.
-- Hal
Quoted 32 lines
-- Hal
Quoted 28 lines
Quoted 19 lines
opensm/opensm/osm_sa_pkey_record.c +2
-3@@ -269,14 +277,14 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data) context.p_list = &rec_list; context.comp_mask = p_rcvd_mad->comp_mask; context.sa = sa; - context.block_num = p_rcvd_rec->block_num; + context.block_num = cl_ntoh16(p_rcvd_rec->block_num); context.p_req_physp = p_req_physp; OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Got Query Lid:%u(%02X), Block:0x%02X(%02X), Port:0x%02X(%02X)\n", cl_ntoh16(p_rcvd_rec->lid), (comp_mask & IB_PKEY_COMPMASK_LID) != 0, p_rcvd_rec->port_num, - (comp_mask & IB_PKEY_COMPMASK_PORT) != 0, p_rcvd_rec->block_num, + (comp_mask & IB_PKEY_COMPMASK_PORT) != 0, context.block_num, (comp_mask & IB_PKEY_COMPMASK_BLOCK) != 0); cl_plock_acquire(sa->p_lock); --Quoted 2 lines
1.7.1
Alex
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 57 lines · Hal Rosenstock
Quoted 56 lines · Alex Netes
Hi Jason,
Quoted 16 lines · Jason Gunthorpe
* Properly byteswap
block_numbefore using it
* Properly check bounds of the block number before de-referencing it.This fixes a remotely triggered null pointer dereference.
---
opensm/include/iba/ib_types.h | 2 +-opensm/opensm/osm_sa_pkey_record.c| 16 ++++++++++++----2 files changed, 13 insertions(+), 5 deletions(-)opensm/include/iba/ib_types.h +0
-0@@ -6724,7 +6724,7 @@ typedef struct _ib_pkey_table { #include <complib/cl_packon.h> typedef struct _ib_pkey_table_record {Quoted 6 lines
ib_net16_tlid; // for CA: lid of port, for switch lid of port 0
-uint16_tblock_num;
+ib_net16_tblock_num;
uint8_tport_num; // for switch: port number, for CA: reserveduint8_treserved1;
uint16_treserved2;I guess reserved2 could also be changed to
ib_net16_t, right?Quoted 28 lines
opensm/opensm/osm_sa_pkey_record.c +10
-2@@ -71,6 +71,7 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, osm_pkey_item_t *p_rec_item; uint16_t lid; ib_api_status_t status = IB_SUCCESS; + ib_pkey_table_t *tbl; OSM_LOG_ENTER(sa->p_log);@@ -98,8 +99,15 @@ static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp); - p_rec_item->rec.pkey_tbl = - *(osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block)); + /* FIXME: There are ninf.PartitionCap or swinf.PartitionEnforcementCap + pkey entries so everything in that range is a valid block number + even if opensm is not using it. Return 0. However things outside + that range should return no entries.. Not sure how to figure that + here? The range of pkey_tbl can be less than the cap, so + this falsely triggers. */ + tbl = osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block); + if (tbl) + p_rec_item->rec.pkey_tbl = *tbl;
Quoted 9 lines
Quoted 5 lines
opensm/opensm/osm_sa_pkey_record.c static void sa_pkey_create(IN osm_sa_t * sa, IN osm_physp_t * p_physp, · line 112
Quoted 1 line
opensm/opensm/osm_sa_pkey_record.c +0
-0cl_qlist_insert_tail(p_ctxt->p_list, &p_rec_item->list_item);What is the expected behaviour when IB PKey table block is empty? rec.pkey_tbl might be uninitialized here.
Shouldn't SubnAdmGetResp containERR_NO_RECORDSin such case?It depends on the method used in the SA query. GetTable never returns
ERR_NO_RECORDSwhereas a Get can.
In case when IB PKey table block is empty, p_rec_item->rec.pkey_tbl would be uninitialized.
Quoted 30 lines
-- Hal
Quoted 28 lines
Quoted 19 lines
opensm/opensm/osm_sa_pkey_record.c +2
-3@@ -269,14 +277,14 @@ void osm_pkey_rec_rcv_process(IN void *ctx, IN void *data) context.p_list = &rec_list; context.comp_mask = p_rcvd_mad->comp_mask; context.sa = sa; - context.block_num = p_rcvd_rec->block_num; + context.block_num = cl_ntoh16(p_rcvd_rec->block_num); context.p_req_physp = p_req_physp; OSM_LOG(sa->p_log, OSM_LOG_DEBUG, "Got Query Lid:%u(%02X), Block:0x%02X(%02X), Port:0x%02X(%02X)\n", cl_ntoh16(p_rcvd_rec->lid), (comp_mask & IB_PKEY_COMPMASK_LID) != 0, p_rcvd_rec->port_num, - (comp_mask & IB_PKEY_COMPMASK_PORT) != 0, p_rcvd_rec->block_num, + (comp_mask & IB_PKEY_COMPMASK_PORT) != 0, context.block_num, (comp_mask & IB_PKEY_COMPMASK_BLOCK) != 0); cl_plock_acquire(sa->p_lock); --Quoted 2 lines
1.7.1
Alex
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20110225112514.GC8537-iQai9MGU/dyyaiaB+Ve85laTQe2KTcn/@public.gmane.org
Quoted 8 lines · Alex Netes
Quoted 6 lines
Quoted 3 lines
What is the expected behaviour when IB PKey table block is empty? rec.pkey_tbl might be uninitialized here.
Shouldn't SubnAdmGetResp containERR_NO_RECORDSin such case?It depends on the method used in the SA query. GetTable never returns
ERR_NO_RECORDSwhereas a Get can.In case when IB PKey table block is empty,
p_rec_item->rec.pkey_tblwould be uninitialized.
No, it isn't, it is zero.
memset(p_rec_item, 0, sizeof(*p_rec_item));
p_rec_item->rec.lid = lid;
p_rec_item->rec.block_num = block;
p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp);
p_rec_item->rec.pkey_tbl =
*(osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp),
block));Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20110225193509.GA9157-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Quoted 23 lines · Jason Gunthorpe
Quoted 8 lines · Alex Netes
Quoted 6 lines
Quoted 3 lines
What is the expected behaviour when IB PKey table block is empty? rec.pkey_tbl might be uninitialized here.
Shouldn't SubnAdmGetResp containERR_NO_RECORDSin such case?It depends on the method used in the SA query. GetTable never returns
ERR_NO_RECORDSwhereas a Get can.In case when IB PKey table block is empty,
p_rec_item->rec.pkey_tblwould be uninitialized.No, it isn't, it is zero.
memset(p_rec_item, 0, sizeof(*p_rec_item)); p_rec_item->rec.lid = lid; p_rec_item->rec.block_num = block; p_rec_item->rec.port_num = osm_physp_get_port_num(p_physp); p_rec_item->rec.pkey_tbl = *(osm_pkey_tbl_block_get(osm_physp_get_pkey_tbl(p_physp), block));
Quoted 1 line
Jason
Sorry. Missed that.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 5 lines · Jason Gunthorpe
* Properly byteswap
block_numbefore using it
* Properly check bounds of the block number before de-referencing it.This fixes a remotely triggered null pointer dereference.
---
Applied. Thanks.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html