sctp: Do no select unconfirmed transports for retransmissions
authorVlad Yasevich <vladislav.yasevich@hp.com>
Sat, 1 May 2010 02:39:26 +0000 (22:39 -0400)
committerVlad Yasevich <vladislav.yasevich@hp.com>
Sat, 1 May 2010 02:39:26 +0000 (22:39 -0400)
An unconfirmed transport is one that we have not been
able to reach since the beginning.  There is no point in
trying to retrasnmit data on those transports.  Also, the
specification forbids it due to security issues.

Reported-by: Frank Schuster <frank.schuster01@web.de>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
net/sctp/associola.c

index df5abbff63e22b5de97b3579173adf37519a8df3..de830c268564ab05222cc076cd1bbec94a3bac09 100644 (file)
@@ -762,7 +762,8 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
                asoc->peer.retran_path = peer;
        }
 
-       if (asoc->peer.active_path == asoc->peer.retran_path) {
+       if (asoc->peer.active_path == asoc->peer.retran_path &&
+           peer->state != SCTP_UNCONFIRMED) {
                asoc->peer.retran_path = peer;
        }
 
@@ -1318,7 +1319,7 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc)
                        /* Keep track of the next transport in case
                         * we don't find any active transport.
                         */
-                       if (!next)
+                       if (t->state != SCTP_UNCONFIRMED && !next)
                                next = t;
                }
        }