You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/net
Nick Khyl c9836b454d net/netmon: fix goroutine leak in winMon if the monitor is never started
When the portable Monitor creates a winMon via newOSMon, we register
address and route change callbacks with Windows. Once a callback is hit,
it starts a goroutine that attempts to send the event into messagec and returns.
The newly started goroutine then blocks until it can send to the channel.
However, if the monitor is never started and winMon.Receive is never called,
the goroutines remain indefinitely blocked, leading to goroutine leaks and
significant memory consumption in the tailscaled service process on Windows.
Unlike the tailscaled subprocess, the service process creates but never starts
a Monitor.

This PR adds a check within the callbacks to confirm the monitor's active status,
and exits immediately if the monitor hasn't started.

Updates #9864

Signed-off-by: Nick Khyl <nickk@tailscale.com>
2 years ago
..
art net/art: allow non-pointers as values 2 years ago
connstats net/connstats: exclude traffic with internal Tailscale service (#7904) 3 years ago
dns net/dns: use an additional registry setting to disable dynamic DNS updates for our interface on Windows 2 years ago
dnscache net/dnscache: remove completed TODO 2 years ago
dnsfallback net/dnsfallback: add singleflight to recursive resolver 2 years ago
flowtrack all: update copyright and license headers 3 years ago
interfaces net/interfaces: better handle multiple interfaces in LikelyHomeRouterIP 2 years ago
memnet net/memnet: export the network name (#9111) 2 years ago
netaddr all: update copyright and license headers 3 years ago
netcheck net/netcheck: use DERP frames as a signal for home region liveness 2 years ago
neterror net/neterror, wgengine/magicsock: use UDP GSO and GRO on Linux (#7791) 3 years ago
netkernelconf client/tailscale,ipn/{ipnlocal,localapi}: check UDP GRO config (#10071) 2 years ago
netknob all: update copyright and license headers 3 years ago
netmon net/netmon: fix goroutine leak in winMon if the monitor is never started 2 years ago
netns net/{interfaces,netmon}: remove "interesting", EqualFiltered API 2 years ago
netstat net/{netns,netstat}: use new x/sys/cpu.IsBigEndian 3 years ago
netutil net/netutil: add function to check rp_filter value (#5703) 2 years ago
packet all: cleanup unused code, part 1 (#10661) 2 years ago
ping net/ping: fix ICMP echo code field to 0 2 years ago
portmapper all: cleanup unused code, part 1 (#10661) 2 years ago
proxymux all: cleanup unused code, part 1 (#10661) 2 years ago
routetable all: cleanup unused code, part 1 (#10661) 2 years ago
socks5 net/socks5: add password auth support 3 years ago
sockstats net/dns: retry forwarder requests over TCP 2 years ago
speedtest all: update copyright and license headers 3 years ago
stun wgengine/magicsock, types/nettype, etc: finish ReadFromUDPAddrPort netip migration 3 years ago
tcpinfo net/tcpinfo: add package to allow fetching TCP information 2 years ago
tlsdial cmd/tailscale/cli: make netcheck run even if machine lacks TLS certs 2 years ago
tsaddr all: cleanup unused code, part 1 (#10661) 2 years ago
tsdial all: cleanup unused code, part 1 (#10661) 2 years ago
tshttpproxy net/tshttpproxy: don't proxy through ourselves 3 years ago
tstun all: cleanup unused code, part 1 (#10661) 2 years ago
wsconn net/wsconn: accept a remote addr string and plumb it through 2 years ago