Skip to content

Commit

Permalink
sctp: fix association hangs due to reneging packets below the cumulat…
Browse files Browse the repository at this point in the history
…ive TSN ACK point

In sctp_ulpq_renege_list(), do not renege packets below the
cumulative TSN ACK point.

Signed-off-by: Lee A. Roberts <lee.roberts@hp.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
  • Loading branch information
Lee A. Roberts authored and David S. Miller committed Feb 28, 2013
1 parent 70fc69b commit e67f85e
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions net/sctp/ulpqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -969,11 +969,16 @@ static __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq,

tsnmap = &ulpq->asoc->peer.tsn_map;

while ((skb = __skb_dequeue_tail(list)) != NULL) {
freed += skb_headlen(skb);
while ((skb = skb_peek_tail(list)) != NULL) {
event = sctp_skb2event(skb);
tsn = event->tsn;

/* Don't renege below the Cumulative TSN ACK Point. */
if (TSN_lte(tsn, sctp_tsnmap_get_ctsn(tsnmap)))
break;

__skb_unlink(skb, list);
freed += skb_headlen(skb);
sctp_ulpevent_free(event);
sctp_tsnmap_renege(tsnmap, tsn);
if (freed >= needed)
Expand Down

0 comments on commit e67f85e

Please sign in to comment.