diff options
author | Vlad Yasevich <vladislav.yasevich@hp.com> | 2009-09-04 18:21:00 -0400 |
---|---|---|
committer | Vlad Yasevich <vladislav.yasevich@hp.com> | 2009-09-04 18:21:00 -0400 |
commit | 31b02e1549406efa346534acad956a42bc3f28c4 (patch) | |
tree | 3acc807275810eb2efdc5fc2744bdfc3528488c2 /net/sctp/sm_statefuns.c | |
parent | f68b2e05f326971cd76c65aa91a1a41771dd7485 (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.c | 6 |
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. |