aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/peer.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2016-11-04 03:11:21 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2016-11-04 03:11:21 +0100
commit4d66775dd2276a338e17b22c86c7845bce52d7e5 (patch)
tree3f6a78b160499b1bf5a49795cf4d4c5a03977dc3 /src/peer.c
parentchacha20poly1305: src is different from dst on last piece (diff)
downloadwireguard-monolithic-historical-4d66775dd2276a338e17b22c86c7845bce52d7e5.tar.xz
wireguard-monolithic-historical-4d66775dd2276a338e17b22c86c7845bce52d7e5.zip
socket: use dst_cache instead of handrolled cache
Diffstat (limited to 'src/peer.c')
-rw-r--r--src/peer.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/peer.c b/src/peer.c
index e1aaf6b..307e499 100644
--- a/src/peer.c
+++ b/src/peer.c
@@ -26,6 +26,11 @@ struct wireguard_peer *peer_create(struct wireguard_device *wg, const u8 public_
if (!peer)
return NULL;
+ if (dst_cache_init(&peer->endpoint_cache, GFP_KERNEL)) {
+ kfree(peer);
+ return NULL;
+ }
+
peer->internal_id = atomic64_inc_return(&peer_counter);
peer->device = wg;
cookie_init(&peer->latest_cookie);
@@ -82,8 +87,7 @@ static void rcu_release(struct rcu_head *rcu)
struct wireguard_peer *peer = container_of(rcu, struct wireguard_peer, rcu);
pr_debug("Peer %Lu (%pISpfsc) destroyed\n", peer->internal_id, &peer->endpoint_addr);
skb_queue_purge(&peer->tx_packet_queue);
- if (peer->endpoint_dst)
- dst_release(peer->endpoint_dst);
+ dst_cache_destroy(&peer->endpoint_cache);
kzfree(peer);
}