| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: "Jason A. Donenfeld" <Jason@zx2c4.com> |
| Date: Wed, 29 Apr 2020 14:59:21 -0600 |
| Subject: [PATCH] wireguard: queueing: cleanup ptr_ring in error path of |
| packet_queue_init |
| |
| commit 130c58606171326c81841a49cc913cd354113dd9 upstream. |
| |
| Prior, if the alloc_percpu of packet_percpu_multicore_worker_alloc |
| failed, the previously allocated ptr_ring wouldn't be freed. This commit |
| adds the missing call to ptr_ring_cleanup in the error case. |
| |
| Reported-by: Sultan Alsawaf <sultan@kerneltoast.com> |
| Fixes: e7096c131e51 ("net: WireGuard secure network tunnel") |
| Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> |
| --- |
| drivers/net/wireguard/queueing.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/wireguard/queueing.c |
| +++ b/drivers/net/wireguard/queueing.c |
| @@ -35,8 +35,10 @@ int wg_packet_queue_init(struct crypt_qu |
| if (multicore) { |
| queue->worker = wg_packet_percpu_multicore_worker_alloc( |
| function, queue); |
| - if (!queue->worker) |
| + if (!queue->worker) { |
| + ptr_ring_cleanup(&queue->ring, NULL); |
| return -ENOMEM; |
| + } |
| } else { |
| INIT_WORK(&queue->work, function); |
| } |