From 66d52d287094174a2f5edaea84ecccdc54f459b4 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 11 Oct 2017 00:16:24 +0200 Subject: send: do not requeue if packet is dead --- src/send.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/send.c b/src/send.c index ed19e58..6a77a25 100644 --- a/src/send.c +++ b/src/send.c @@ -237,14 +237,19 @@ void packet_encrypt_worker(struct work_struct *work) bool have_simd = chacha20poly1305_init_simd(); while ((first = ptr_ring_consume_bh(&queue->ring)) != NULL) { + bool dead = false; + skb_walk_null_queue_safe (first, skb, next) { if (likely(skb_encrypt(skb, PACKET_CB(first)->keypair, have_simd))) skb_reset(skb); else { queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first, PACKET_STATE_DEAD); - continue; + dead = true; + break; } } + if (unlikely(dead)) + continue; queue_enqueue_per_peer(&PACKET_PEER(first)->tx_queue, first, PACKET_STATE_CRYPTED); } chacha20poly1305_deinit_simd(have_simd); -- cgit v1.2.3-59-g8ed1b