summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWei Yongjun <yjwei@cn.fujitsu.com>2011-04-12 15:22:22 +0000
committerDavid S. Miller <davem@davemloft.net>2011-04-12 19:33:51 -0700
commit9494c7c5774d64a84a269aad38c153c4dbff97e6 (patch)
tree03d1eb5fffa30789455f12fb59bbd917e465e8c9
parent25f7bf7d0dfb460505cbe42676340e33100aca2e (diff)
downloadop-kernel-dev-9494c7c5774d64a84a269aad38c153c4dbff97e6.zip
op-kernel-dev-9494c7c5774d64a84a269aad38c153c4dbff97e6.tar.gz
sctp: fix oops while removed transport still using as retran path
Since we can not update retran path to unconfirmed transports, when we remove a peer, the retran path may not be update if the other transports are all unconfirmed, and we will still using the removed transport as the retran path. This may cause panic if retrasnmit happen. Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/sctp/associola.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 922fdd7..1a21c57 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -569,6 +569,8 @@ void sctp_assoc_rm_peer(struct sctp_association *asoc,
sctp_assoc_set_primary(asoc, transport);
if (asoc->peer.active_path == peer)
asoc->peer.active_path = transport;
+ if (asoc->peer.retran_path == peer)
+ asoc->peer.retran_path = transport;
if (asoc->peer.last_data_from == peer)
asoc->peer.last_data_from = transport;
OpenPOWER on IntegriCloud