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 | 4fb8ba017d796b9425be42e6ed39c4e24496e89f (patch) | |
tree | f8626b3788c3366123f3cfbfc8bea89bbd7a48d1 /src | |
parent | 9a21a03d6871292dce9115fac715b9fe85734cf7 (diff) |
socket: avoid deadlock on port retry
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src')
-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); |