From ffa1f4994f97faa0151b508e3668d8009d42dc99 Mon Sep 17 00:00:00 2001 From: JackDoan Date: Wed, 15 Apr 2026 14:30:16 -0500 Subject: [PATCH] tun_linux.go: set O_NONBLOCK --- overlay/tun_linux.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/overlay/tun_linux.go b/overlay/tun_linux.go index 9d779a4b..d0e95695 100644 --- a/overlay/tun_linux.go +++ b/overlay/tun_linux.go @@ -72,6 +72,7 @@ type ifreqQLEN struct { } func newTunFromFd(c *config.C, l *logrus.Logger, deviceFd int, vpnNetworks []netip.Prefix) (*tun, error) { + //todo if this actually gets called, it should check+set O_NONBLOCK file := os.NewFile(uintptr(deviceFd), "/dev/net/tun") t, err := newTunGeneric(c, l, file, vpnNetworks) @@ -85,7 +86,7 @@ func newTunFromFd(c *config.C, l *logrus.Logger, deviceFd int, vpnNetworks []net } func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, multiqueue bool) (*tun, error) { - fd, err := unix.Open("/dev/net/tun", os.O_RDWR, 0) + fd, err := unix.Open("/dev/net/tun", os.O_RDWR|unix.O_NONBLOCK, 0) if err != nil { // If /dev/net/tun doesn't exist, try to create it (will happen in docker) if os.IsNotExist(err) { @@ -98,7 +99,7 @@ func newTun(c *config.C, l *logrus.Logger, vpnNetworks []netip.Prefix, multiqueu return nil, fmt.Errorf("failed to create /dev/net/tun: %w", err) } - fd, err = unix.Open("/dev/net/tun", os.O_RDWR, 0) + fd, err = unix.Open("/dev/net/tun", os.O_RDWR|unix.O_NONBLOCK, 0) if err != nil { return nil, fmt.Errorf("created /dev/net/tun, but still failed: %w", err) }