[ofa-general] [PATCH] ib/mad: fix address handle leak in mad_rmpp

Sean Hefty sean.hefty at intel.com
Tue Jul 31 15:10:54 PDT 2007


The address handle associated with dual-sided RMPP direction
switch ACKs is never destroyed.  Free the AH for ACKs which
fall into this category.  Problem was reported by Dotan
Barak (dotanb at dev.mellanox.co.il).

Signed-off-by: Sean Hefty <sean.hefty at intel.com>
---
Dotan, can you verify that this fixes the problem for you?  (I tested against
osmtest as you indicated as well.)

Roland, this fix would be for 2.6.23.

 drivers/infiniband/core/mad_rmpp.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/infiniband/core/mad_rmpp.c b/drivers/infiniband/core/mad_rmpp.c
index 3663fd7..d43bc62 100644
--- a/drivers/infiniband/core/mad_rmpp.c
+++ b/drivers/infiniband/core/mad_rmpp.c
@@ -163,8 +163,10 @@ static struct ib_mad_send_buf *alloc_response_msg(struct ib_mad_agent *agent,
 				 hdr_len, 0, GFP_KERNEL);
 	if (IS_ERR(msg))
 		ib_destroy_ah(ah);
-	else
+	else {
 		msg->ah = ah;
+		msg->context[0] = ah;
+	}
 
 	return msg;
 }
@@ -197,9 +199,7 @@ static void ack_ds_ack(struct ib_mad_agent_private *agent,
 
 void ib_rmpp_send_handler(struct ib_mad_send_wc *mad_send_wc)
 {
-	struct ib_rmpp_mad *rmpp_mad = mad_send_wc->send_buf->mad;
-
-	if (rmpp_mad->rmpp_hdr.rmpp_type != IB_MGMT_RMPP_TYPE_ACK)
+	if (mad_send_wc->send_buf->context[0] == mad_send_wc->send_buf->ah)
 		ib_destroy_ah(mad_send_wc->send_buf->ah);
 	ib_free_send_mad(mad_send_wc->send_buf);
 }




More information about the general mailing list