summaryrefslogtreecommitdiff
path: root/net/sctp
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2010-04-30 22:41:09 -0400
committerVlad Yasevich <vladislav.yasevich@hp.com>2010-04-30 22:41:09 -0400
commitd598b166ced20d9b9281ea3527c0e18405ddb803 (patch)
tree9133b90a3f42347842190938cd27fa7ce6729377 /net/sctp
parentb99a4d53a74ac25eb4b930eef6c745579149c571 (diff)
downloadlinux-3.10-d598b166ced20d9b9281ea3527c0e18405ddb803.tar.gz
linux-3.10-d598b166ced20d9b9281ea3527c0e18405ddb803.tar.bz2
linux-3.10-d598b166ced20d9b9281ea3527c0e18405ddb803.zip
sctp: Make sure we always return valid retransmit path
commit 4951feda0c60d1ef681f1a270afdd617924ab041 sctp: Do no select unconfirmed transports for retransmissions added code to make sure that we do not select unconfirmed paths for data transmission. This caused a problem when there are only 2 paths, 1 unconfirmed and 1 unreachable. In that case, the next retransmit path returned is NULL and that causes a kernel crash. The solution is to only change retransmit paths if we found one to use. Reported-by: Frank Schuster <frank.schuster01@web.de> Signed-off-b: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp')
-rw-r--r--net/sctp/associola.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index de830c26856..fab9cb2783a 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -1324,7 +1324,8 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
}
}
- asoc->peer.retran_path = t;
+ if (t)
+ asoc->peer.retran_path = t;
SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_update_retran_path:association"
" %p addr: ",