From: Lee A. Roberts Date: Thu, 28 Feb 2013 04:37:28 +0000 (+0000) Subject: sctp: fix association hangs due to reneging packets below the cumulative TSN ACK... X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=e67f85ecd83de66d4f25f2e0f90bb0d01a52ddd8;p=GitHub%2FLineageOS%2Fandroid_kernel_samsung_universal7580.git 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: Lee A. Roberts Acked-by: Vlad Yasevich Acked-by: Neil Horman --- diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c index ada17464b65..63afddcbcd2 100644 --- a/net/sctp/ulpqueue.c +++ b/net/sctp/ulpqueue.c @@ -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)