--- zzzz-none-000/linux-4.4.60/net/ipv4/inet_fragment.c 2017-04-08 07:53:53.000000000 +0000 +++ hawkeye-5590-729/linux-4.4.60/net/ipv4/inet_fragment.c 2022-03-30 14:21:53.000000000 +0000 @@ -305,12 +305,17 @@ /* Release all fragment data. */ fp = q->fragments; nf = q->net; - while (fp) { - struct sk_buff *xp = fp->next; - sum_truesize += fp->truesize; - frag_kfree_skb(nf, f, fp); - fp = xp; + if (!fp) { + sum_truesize = skb_rbtree_purge(&q->rb_fragments); + } else { + do { + struct sk_buff *xp = fp->next; + + sum_truesize += fp->truesize; + frag_kfree_skb(nf, f, fp); + fp = xp; + } while (fp); } sum = sum_truesize + f->qsize;