Jason A. Donenfeld
89dd065e53
README: update repo urls
2019-12-30 11:53:39 +01:00
Jason A. Donenfeld
ddfad453cf
device: SendmsgN mutates the input sockaddr
...
So we take a new granular lock to prevent concurrent writes from
racing.
WARNING: DATA RACE
Write at 0x00c0011f2740 by goroutine 27:
golang.org/x/sys/unix.(*SockaddrInet4).sockaddr()
/go/pkg/mod/golang.org/x/sys@v0.0.0-20191105231009-c1f44814a5cd/unix/syscall_linux.go:384
+0x114
golang.org/x/sys/unix.SendmsgN()
/go/pkg/mod/golang.org/x/sys@v0.0.0-20191105231009-c1f44814a5cd/unix/syscall_linux.go:1304
+0x288
golang.zx2c4.com/wireguard/device.send4()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/conn_linux.go:485
+0x11f
golang.zx2c4.com/wireguard/device.(*nativeBind).Send()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/conn_linux.go:268
+0x1d6
golang.zx2c4.com/wireguard/device.(*Peer).SendBuffer()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/peer.go:151
+0x285
golang.zx2c4.com/wireguard/device.(*Peer).SendHandshakeInitiation()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/send.go:163
+0x692
golang.zx2c4.com/wireguard/device.(*Device).RoutineReadFromTUN()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/send.go:318
+0x4b8
Previous write at 0x00c0011f2740 by goroutine 386:
golang.org/x/sys/unix.(*SockaddrInet4).sockaddr()
/go/pkg/mod/golang.org/x/sys@v0.0.0-20191105231009-c1f44814a5cd/unix/syscall_linux.go:384
+0x114
golang.org/x/sys/unix.SendmsgN()
/go/pkg/mod/golang.org/x/sys@v0.0.0-20191105231009-c1f44814a5cd/unix/syscall_linux.go:1304
+0x288
golang.zx2c4.com/wireguard/device.send4()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/conn_linux.go:485
+0x11f
golang.zx2c4.com/wireguard/device.(*nativeBind).Send()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/conn_linux.go:268
+0x1d6
golang.zx2c4.com/wireguard/device.(*Peer).SendBuffer()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/peer.go:151
+0x285
golang.zx2c4.com/wireguard/device.(*Peer).SendHandshakeInitiation()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/send.go:163
+0x692
golang.zx2c4.com/wireguard/device.expiredRetransmitHandshake()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/timers.go:110
+0x40c
golang.zx2c4.com/wireguard/device.(*Peer).NewTimer.func1()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/timers.go:42
+0xd8
Goroutine 27 (running) created at:
golang.zx2c4.com/wireguard/device.NewDevice()
/go/pkg/mod/golang.zx2c4.com/wireguard@v0.0.20191012/device/device.go:322
+0x5e8
main.main()
/go/src/x/main.go:102 +0x58e
Goroutine 386 (finished) created at:
time.goFunc()
/usr/local/go/src/time/sleep.go:168 +0x51
Reported-by: Ben Burkert <ben@benburkert.com>
2019-11-28 11:11:13 +01:00
Jason A. Donenfeld
2b242f9393
wintun: manage ring memory manually
...
It's large and Go's garbage collector doesn't deal with it especially
well.
2019-11-22 13:13:55 +01:00
Jason A. Donenfeld
4cdf805b29
constants: recalculate rekey max based on a one minute flood
...
Discussed-with: Mathias Hall-Andersen <mathias@hall-andersen.dk>
2019-10-30 14:29:32 +01:00
Jonathan Tooker
f7d0edd2ec
global: fix a few typos courtesy of codespell
...
Signed-off-by: Jonathan Tooker <jonathan.tooker@netprotect.com>
2019-10-22 11:51:25 +02:00
Jason A. Donenfeld
ffffbbcc8a
device: allow blackholing sockets
2019-10-21 13:29:57 +02:00
Jason A. Donenfeld
47b02c618b
device: remove dead error reporting code
2019-10-21 11:46:54 +02:00
Jason A. Donenfeld
fd23c66fcd
namespaceapi: remove tasteless comment
2019-10-21 09:02:29 +02:00
Jason A. Donenfeld
ae492d1b35
device: recheck counters while holding write lock
2019-10-17 15:43:06 +02:00
Jason A. Donenfeld
95fbfccf60
wintun: normalize variable names for their types
2019-10-17 15:30:56 +02:00
Avery Pennarun
c85e4a410f
wintun: quickly ignore non-Wintun devices
...
Some devices take ~2 seconds to enumerate on Windows if we try to get
their instance name. The hardware id property, on the other hand,
is available right away.
Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
[zx2c4: inlined this to where it makes sense, reused setupapi const]
2019-10-17 15:19:20 +02:00
Avery Pennarun
1b6c8ddbe8
tun: match windows CreateTUN signature to the Linux variant
...
Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
[zx2c4: fix default value]
2019-10-17 15:19:20 +02:00
Avery Pennarun
0abb6b668c
rwcancel: handle EINTR and EAGAIN in unixSelect()
...
On my Chromebook (Linux 4.19.44 in a VM) and on an AWS EC2
machine, select() was sometimes returning EINTR. This is
harmless and just means you should try again. So let's try
again.
This eliminates a problem where the tunnel fails to come up
correctly and the program needs to be restarted.
Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
2019-10-17 15:19:17 +02:00
David Crawshaw
540d01e54a
device: test packets between two fake devices
...
Signed-off-by: David Crawshaw <crawshaw@tailscale.io>
2019-10-16 11:38:28 +02:00
Jason A. Donenfeld
f2ea85e9f9
version: bump snapshot
2019-10-12 22:34:10 +02:00
Jason A. Donenfeld
222f0f8000
Makefile: remove v prefix
2019-10-08 16:48:18 +02:00
Jason A. Donenfeld
1f146a5e7a
wintun: expose version
2019-10-08 09:58:58 +02:00
Jason A. Donenfeld
f2501aa6c8
uapi: allow preventing creation of new peers when updating
...
This enables race-free updates for wg-dynamic and similar tools.
Suggested-by: Thomas Gschwantner <tharre3@gmail.com>
2019-10-04 11:41:02 +02:00
Jason A. Donenfeld
cb8d01f58a
mod: bump versions
2019-10-04 11:41:02 +02:00
Jason A. Donenfeld
01f8ef4e84
winpipe: use x/sys/windows instead of syscall
2019-09-16 23:39:16 -06:00
Jason A. Donenfeld
70f6c42556
wintun: use correct length for security attributes
2019-09-16 19:38:33 -06:00
Jason A. Donenfeld
bb0b2514c0
tun: windows: unify error message format
2019-09-08 13:52:44 -05:00
Jason A. Donenfeld
7c97fdb1e3
version: bump snapshot
2019-09-08 10:56:55 -05:00
Jason A. Donenfeld
84b5a4d83d
main: simplify warnings
2019-09-08 10:56:00 -05:00
Jason A. Donenfeld
4cd06c0925
tun: openbsd: check for interface already being up
...
In some cases, we operate on an already-up interface, or the user brings
up the interface before we start monitoring. For those situations, we
should first check if the interface is already up.
This still technically races between the initial check and the start of
the route loop, but fixing that is a bit ugly and probably not worth it
at the moment.
Reported-by: Theo Buehler <tb@theobuehler.org>
2019-09-07 00:13:23 -05:00
Jason A. Donenfeld
d12eb91f9a
namespaceapi: AddSIDToBoundaryDescriptor modifies the handle
2019-09-05 21:48:21 -06:00
Jason A. Donenfeld
73d3bd9cd5
wintun: take mutex first always
...
This prevents an ABA deadlock with setupapi's internal locks.
2019-09-01 21:32:28 -06:00
Jason A. Donenfeld
f3dba4c194
wintun: consider abandoned mutexes as released
2019-09-01 21:25:47 -06:00
Jason A. Donenfeld
7937840f96
ipc: windows: use protected prefix
2019-08-31 07:48:42 -06:00
Jason A. Donenfeld
e4b957183c
winpipe: enforce ownership of client connection
2019-08-30 13:21:47 -06:00
Jason A. Donenfeld
950ca2ba8c
wintun: put mutex into private namespace
2019-08-30 11:03:21 -06:00
Jason A. Donenfeld
df2bf34373
namespaceapi: fix mistake
2019-08-30 09:59:36 -06:00
Simon Rozman
a12b765784
namespaceapi: initial version
...
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-30 15:34:17 +02:00
Jason A. Donenfeld
14df9c3e75
wintun: take mutex so that deletion uses the right name
2019-08-30 15:34:17 +02:00
Jason A. Donenfeld
353f0956bc
wintun: move ring constants into module
2019-08-29 13:22:17 -06:00
Jason A. Donenfeld
fa7763c268
wintun: delete all interfaces is not used anymore
2019-08-29 12:22:15 -06:00
Jason A. Donenfeld
d94bae8348
wintun: Wintun->Interface
2019-08-29 12:20:40 -06:00
Jason A. Donenfeld
7689d09336
wintun: keep reference to pool in wintun object
2019-08-29 12:13:16 -06:00
Simon Rozman
69c26dc258
wintun: introduce adapter pools
...
This makes wintun package reusable for non-WireGuard applications.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-29 18:00:44 +02:00
Jason A. Donenfeld
e862131d3c
wintun: simplify rename logic
2019-08-28 19:31:20 -06:00
Jason A. Donenfeld
da28a3e9f3
wintun: give better errors when ndis interface listing fails
2019-08-28 08:39:26 -06:00
Jason A. Donenfeld
3bf3322b2c
wintun: also check for numbered suffix and friendly name
2019-08-28 08:08:07 -06:00
Simon Rozman
7305b4ce93
wintun: upgrade deleting all interfaces and make it reusable
...
DeleteAllInterfaces() didn't check if SPDRP_DEVICEDESC == "WireGuard
Tunnel". It deleted _all_ Wintun adapters, not just WireGuard's.
Furthermore, the DeleteAllInterfaces() was upgraded into a new function
called DeleteMatchingInterfaces() for selectively deletion. This will
be used by WireGuard to clean stale Wintun adapters.
Signed-off-by: Simon Rozman <simon@rozman.si>
2019-08-28 11:39:01 +02:00
Jason A. Donenfeld
26fb615b11
wintun: cleanup earlier
2019-08-27 11:59:15 -06:00
Jason A. Donenfeld
7fbb24afaa
wintun: rename duplicate adapters instead of ourselves
2019-08-27 11:59:15 -06:00
Jason A. Donenfeld
d9008ac35c
wintun: match suffix numbers
2019-08-26 14:46:43 -06:00
Jason A. Donenfeld
f8198c0428
device: getsockname on linux to determine port
...
It turns out Go isn't passing the pointer properly so we wound up with a
zero port every time.
2019-08-25 12:45:13 -06:00
Jason A. Donenfeld
0c540ad60e
wintun: make description consistent across fields
2019-08-24 12:29:17 +02:00
Jason A. Donenfeld
3cedc22d7b
wintun: try multiple names until one isn't a duplicate
2019-08-22 08:52:59 +02:00
Jason A. Donenfeld
68fea631d8
wintun: use nci.dll directly instead of buggy netshell
2019-08-21 09:16:12 +02:00