Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d53eff4 authored by Steffen Klassert's avatar Steffen Klassert
Browse files

xfrm: Don't queue retransmitted packets if the original is still on the host



It does not make sense to queue retransmitted packets if the
original packet is still in some queue of this host. So add
a check to xdst_queue_output() and drop the packet if the
original packet is not yet sent.

Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
Acked-by: default avatarEric Dumazet <edumazet@google.com>
parent 5cf4eb54
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -1832,6 +1832,13 @@ static int xdst_queue_output(struct sk_buff *skb)
	struct dst_entry *dst = skb_dst(skb);
	struct xfrm_dst *xdst = (struct xfrm_dst *) dst;
	struct xfrm_policy_queue *pq = &xdst->pols[0]->polq;
	const struct sk_buff *fclone = skb + 1;

	if (unlikely(skb->fclone == SKB_FCLONE_ORIG &&
		     fclone->fclone == SKB_FCLONE_CLONE)) {
		kfree_skb(skb);
		return 0;
	}

	if (pq->hold_queue.qlen > XFRM_MAX_QUEUE_LEN) {
		kfree_skb(skb);