Commit e67f85ec authored by Lee A. Roberts's avatar Lee A. Roberts Committed by David S. Miller

sctp: fix association hangs due to reneging packets below the cumulative TSN ACK point

In sctp_ulpq_renege_list(), do not renege packets below the
cumulative TSN ACK point.
Signed-off-by: default avatarLee A. Roberts <lee.roberts@hp.com>
Acked-by: default avatarVlad Yasevich <vyasevich@gmail.com>
Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
parent 70fc69bc
...@@ -969,11 +969,16 @@ static __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq, ...@@ -969,11 +969,16 @@ static __u16 sctp_ulpq_renege_list(struct sctp_ulpq *ulpq,
tsnmap = &ulpq->asoc->peer.tsn_map; tsnmap = &ulpq->asoc->peer.tsn_map;
while ((skb = __skb_dequeue_tail(list)) != NULL) { while ((skb = skb_peek_tail(list)) != NULL) {
freed += skb_headlen(skb);
event = sctp_skb2event(skb); event = sctp_skb2event(skb);
tsn = event->tsn; 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_ulpevent_free(event);
sctp_tsnmap_renege(tsnmap, tsn); sctp_tsnmap_renege(tsnmap, tsn);
if (freed >= needed) if (freed >= needed)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment