aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp
diff options
context:
space:
mode:
authorVlad Yasevich <vladislav.yasevich@hp.com>2007-03-19 20:01:17 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-03-20 03:09:43 -0400
commit0b58a811461ccf3cf848aba4cc192538fd3b0516 (patch)
treee8ada90819aabdcc2041a5637c7e6f44446cc36b /net/sctp
parentc577c2b99387b5ff8607d42d6eaff9ec024d4773 (diff)
[SCTP]: Clean up stale data during association restart
During association restart we may have stale data sitting on the ULP queue waiting for ordering or reassembly. This data may cause severe problems if not cleaned up. In particular stale data pending ordering may cause problems with receive window exhaustion if our peer has decided to restart the association. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: Sridhar Samudrala <sri@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp')
-rw-r--r--net/sctp/associola.c6
-rw-r--r--net/sctp/ulpqueue.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index fa82b73c965b..2505cd3b8d29 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -1063,6 +1063,12 @@ void sctp_assoc_update(struct sctp_association *asoc,
1063 */ 1063 */
1064 sctp_ssnmap_clear(asoc->ssnmap); 1064 sctp_ssnmap_clear(asoc->ssnmap);
1065 1065
1066 /* Flush the ULP reassembly and ordered queue.
1067 * Any data there will now be stale and will
1068 * cause problems.
1069 */
1070 sctp_ulpq_flush(&asoc->ulpq);
1071
1066 } else { 1072 } else {
1067 /* Add any peer addresses from the new association. */ 1073 /* Add any peer addresses from the new association. */
1068 list_for_each(pos, &new->peer.transport_addr_list) { 1074 list_for_each(pos, &new->peer.transport_addr_list) {
diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c
index f4759a9bdaee..bfb197e37da3 100644
--- a/net/sctp/ulpqueue.c
+++ b/net/sctp/ulpqueue.c
@@ -73,7 +73,7 @@ struct sctp_ulpq *sctp_ulpq_init(struct sctp_ulpq *ulpq,
73 73
74 74
75/* Flush the reassembly and ordering queues. */ 75/* Flush the reassembly and ordering queues. */
76static void sctp_ulpq_flush(struct sctp_ulpq *ulpq) 76void sctp_ulpq_flush(struct sctp_ulpq *ulpq)
77{ 77{
78 struct sk_buff *skb; 78 struct sk_buff *skb;
79 struct sctp_ulpevent *event; 79 struct sctp_ulpevent *event;