IB/mad: Fix address handle leak in mad_rmpp
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@dev.mellanox.co.il>. Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
8fc394b197
commit
38d5af9565
|
@ -163,8 +163,10 @@ static struct ib_mad_send_buf *alloc_response_msg(struct ib_mad_agent *agent,
|
||||||
hdr_len, 0, GFP_KERNEL);
|
hdr_len, 0, GFP_KERNEL);
|
||||||
if (IS_ERR(msg))
|
if (IS_ERR(msg))
|
||||||
ib_destroy_ah(ah);
|
ib_destroy_ah(ah);
|
||||||
else
|
else {
|
||||||
msg->ah = ah;
|
msg->ah = ah;
|
||||||
|
msg->context[0] = ah;
|
||||||
|
}
|
||||||
|
|
||||||
return msg;
|
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)
|
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 (mad_send_wc->send_buf->context[0] == mad_send_wc->send_buf->ah)
|
||||||
|
|
||||||
if (rmpp_mad->rmpp_hdr.rmpp_type != IB_MGMT_RMPP_TYPE_ACK)
|
|
||||||
ib_destroy_ah(mad_send_wc->send_buf->ah);
|
ib_destroy_ah(mad_send_wc->send_buf->ah);
|
||||||
ib_free_send_mad(mad_send_wc->send_buf);
|
ib_free_send_mad(mad_send_wc->send_buf);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue