aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/sm_statefuns.c
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2009-09-04 18:21:00 -0400
committerVlad Yasevich <vladislav.yasevich@hp.com>2009-09-04 18:21:00 -0400
commit31b02e1549406efa346534acad956a42bc3f28c4 (patch)
tree3acc807275810eb2efdc5fc2744bdfc3528488c2 /net/sctp/sm_statefuns.c
parentf68b2e05f326971cd76c65aa91a1a41771dd7485 (diff)
sctp: Failover transmitted list on transport delete
Add-IP feature allows users to delete an active transport. If that transport has chunks in flight, those chunks need to be moved to another transport or association may get into unrecoverable state. Reported-by: Rafael Laufer <rlaufer@cisco.com> Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Diffstat (limited to 'net/sctp/sm_statefuns.c')
-rw-r--r--net/sctp/sm_statefuns.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
index 45b8bcafd827..a7f18a352364 100644
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -3543,6 +3543,12 @@ sctp_disposition_t sctp_sf_do_asconf(const struct sctp_endpoint *ep,
3543 asconf_ack = sctp_assoc_lookup_asconf_ack(asoc, hdr->serial); 3543 asconf_ack = sctp_assoc_lookup_asconf_ack(asoc, hdr->serial);
3544 if (!asconf_ack) 3544 if (!asconf_ack)
3545 return SCTP_DISPOSITION_DISCARD; 3545 return SCTP_DISPOSITION_DISCARD;
3546
3547 /* Reset the transport so that we select the correct one
3548 * this time around. This is to make sure that we don't
3549 * accidentally use a stale transport that's been removed.
3550 */
3551 asconf_ack->transport = NULL;
3546 } else { 3552 } else {
3547 /* ADDIP 5.2 E5) Otherwise, the ASCONF Chunk is discarded since 3553 /* ADDIP 5.2 E5) Otherwise, the ASCONF Chunk is discarded since
3548 * it must be either a stale packet or from an attacker. 3554 * it must be either a stale packet or from an attacker.