diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-10-11 00:16:24 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-10-11 15:50:29 +0200 |
commit | 6a52049c687ab632a37377629261d2b1563f5b76 (patch) | |
tree | 3c4be5455d664a6fccd68056d275772f088bbcef /src | |
parent | 28c2976d6effa8787bfbfc67a5ee254d59d32e70 (diff) |
send: do not requeue if packet is dead
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/send.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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); |