summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWei Yongjun <yjwei@cn.fujitsu.com>2010-05-09 16:56:07 +0000
committerDavid S. Miller <davem@davemloft.net>2010-05-16 00:46:22 -0700
commit55fa0cfd7c3ac2ae34cac7dca2e3fbcfe661e6c3 (patch)
tree0f9ccf2d00a10a88f601245fced3581f49f93862
parent35790c0421121364883a167bab8a2e37e1f67f78 (diff)
downloadlinux-3.10-55fa0cfd7c3ac2ae34cac7dca2e3fbcfe661e6c3.tar.gz
linux-3.10-55fa0cfd7c3ac2ae34cac7dca2e3fbcfe661e6c3.tar.bz2
linux-3.10-55fa0cfd7c3ac2ae34cac7dca2e3fbcfe661e6c3.zip
sctp: delete active ICMP proto unreachable timer when free transport
transport may be free before ICMP proto unreachable timer expire, so we should delete active ICMP proto unreachable timer when transport is going away. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Acked-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/sctp/transport.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/sctp/transport.c b/net/sctp/transport.c
index 4a368038d46..165d54e07fc 100644
--- a/net/sctp/transport.c
+++ b/net/sctp/transport.c
@@ -173,6 +173,10 @@ void sctp_transport_free(struct sctp_transport *transport)
del_timer(&transport->T3_rtx_timer))
sctp_transport_put(transport);
+ /* Delete the ICMP proto unreachable timer if it's active. */
+ if (timer_pending(&transport->proto_unreach_timer) &&
+ del_timer(&transport->proto_unreach_timer))
+ sctp_association_put(transport->asoc);
sctp_transport_put(transport);
}