diff options
author | David S. Miller <davem@davemloft.net> | 2017-05-24 15:21:05 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-05-24 15:21:05 -0400 |
commit | 11d3c949b4ca37124fcace1ee3a5c2db0737a268 (patch) | |
tree | 8114c09b85e08d5eb69bbfbe40b0c2cd29ce1d0f | |
parent | 12e8b570e732eaa5eae3a2895ba3fbcf91bde2b4 (diff) | |
parent | 7e06297768886337707f5833942b3bd524a6d3d5 (diff) |
Merge branch 'sctp-dupcookie-fixes'
Xin Long says:
====================
sctp: a bunch of fixes for processing dupcookie
After introducing transport hashtable and per stream info into sctp,
some regressions were caused when processing dupcookie, this patchset
is to fix them.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/sctp/associola.c | 4 | ||||
-rw-r--r-- | net/sctp/sm_make_chunk.c | 13 | ||||
-rw-r--r-- | net/sctp/sm_statefuns.c | 3 |
3 files changed, 10 insertions, 10 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index a9708da28eb5..95238284c422 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c | |||
@@ -1176,7 +1176,9 @@ void sctp_assoc_update(struct sctp_association *asoc, | |||
1176 | 1176 | ||
1177 | asoc->ctsn_ack_point = asoc->next_tsn - 1; | 1177 | asoc->ctsn_ack_point = asoc->next_tsn - 1; |
1178 | asoc->adv_peer_ack_point = asoc->ctsn_ack_point; | 1178 | asoc->adv_peer_ack_point = asoc->ctsn_ack_point; |
1179 | if (!asoc->stream) { | 1179 | |
1180 | if (sctp_state(asoc, COOKIE_WAIT)) { | ||
1181 | sctp_stream_free(asoc->stream); | ||
1180 | asoc->stream = new->stream; | 1182 | asoc->stream = new->stream; |
1181 | new->stream = NULL; | 1183 | new->stream = NULL; |
1182 | } | 1184 | } |
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c index 8a08f13469c4..92e332e17391 100644 --- a/net/sctp/sm_make_chunk.c +++ b/net/sctp/sm_make_chunk.c | |||
@@ -2454,16 +2454,11 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk, | |||
2454 | * stream sequence number shall be set to 0. | 2454 | * stream sequence number shall be set to 0. |
2455 | */ | 2455 | */ |
2456 | 2456 | ||
2457 | /* Allocate storage for the negotiated streams if it is not a temporary | 2457 | if (sctp_stream_init(asoc, gfp)) |
2458 | * association. | 2458 | goto clean_up; |
2459 | */ | ||
2460 | if (!asoc->temp) { | ||
2461 | if (sctp_stream_init(asoc, gfp)) | ||
2462 | goto clean_up; | ||
2463 | 2459 | ||
2464 | if (sctp_assoc_set_id(asoc, gfp)) | 2460 | if (!asoc->temp && sctp_assoc_set_id(asoc, gfp)) |
2465 | goto clean_up; | 2461 | goto clean_up; |
2466 | } | ||
2467 | 2462 | ||
2468 | /* ADDIP Section 4.1 ASCONF Chunk Procedures | 2463 | /* ADDIP Section 4.1 ASCONF Chunk Procedures |
2469 | * | 2464 | * |
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index 4f5e6cfc7f60..f863b5573e42 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
@@ -2088,6 +2088,9 @@ sctp_disposition_t sctp_sf_do_5_2_4_dupcook(struct net *net, | |||
2088 | } | 2088 | } |
2089 | } | 2089 | } |
2090 | 2090 | ||
2091 | /* Set temp so that it won't be added into hashtable */ | ||
2092 | new_asoc->temp = 1; | ||
2093 | |||
2091 | /* Compare the tie_tag in cookie with the verification tag of | 2094 | /* Compare the tie_tag in cookie with the verification tag of |
2092 | * current association. | 2095 | * current association. |
2093 | */ | 2096 | */ |