diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-03-22 22:25:23 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-03-24 04:44:27 +0100 |
commit | 01eda9e92a6e097c9b25d7698b0d2f4cc3346647 (patch) | |
tree | 989140828bb8d64f83947ec714830769a977c6f2 | |
parent | tools: document # comments in wg(8) man page (diff) | |
download | wireguard-monolithic-historical-01eda9e92a6e097c9b25d7698b0d2f4cc3346647.tar.xz wireguard-monolithic-historical-01eda9e92a6e097c9b25d7698b0d2f4cc3346647.zip |
socket: avoid deadlock on port retry
Diffstat (limited to '')
-rw-r--r-- | src/socket.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/socket.c b/src/socket.c index f894cfe..a2b64b3 100644 --- a/src/socket.c +++ b/src/socket.c @@ -322,11 +322,11 @@ int socket_init(struct wireguard_device *wg) .use_udp6_rx_checksums = true, .ipv6_v6only = true }; -retry: #endif - mutex_lock(&wg->socket_update_lock); - +#if IS_ENABLED(CONFIG_IPV6) +retry: +#endif if (rcu_dereference_protected(wg->sock4, lockdep_is_held(&wg->socket_update_lock)) || rcu_dereference_protected(wg->sock6, lockdep_is_held(&wg->socket_update_lock))) { ret = -EADDRINUSE; @@ -339,7 +339,6 @@ retry: goto out; } wg->incoming_port = ntohs(inet_sk(new4->sk)->inet_sport); - set_sock_opts(new4); setup_udp_tunnel_sock(wg->creating_net, new4, &cfg); rcu_assign_pointer(wg->sock4, new4->sk); |