diff options
| author | James O'Doherty <james@theodohertyfamily.com> | 2026-05-29 21:24:42 -0400 |
|---|---|---|
| committer | James O'Doherty <james@theodohertyfamily.com> | 2026-05-29 21:24:42 -0400 |
| commit | b098e2845b68ce90f34e4e1e927b4914d0b00ef7 (patch) | |
| tree | 2288efa8e09ab93735e6ae2c25d42ee33634eb2a /internal/wireguard/wireguard.go | |
| parent | 0f3806f77164af99466bfc8c0d7d5f85f9ec078f (diff) | |
fix: resolve deadlocks, routing errors, and test timings in test suite
- fix(cli): resolve Flock self-deadlock in ExecuteCommand cleanup by reusing the existing lockFile handle if already held during premature exit.
- fix(wireguard): configure explicit default route destination (0.0.0.0/0 for IPv4 and ::/0 for IPv6) to avoid netlink "either Dst.IP, Src.IP or Gw must be set" error.
- fix(wireguard): initialize the Tunnel return parameter in StartTunnel to prevent a nil pointer dereference.
- test(e2e): fix argument ordering in waitForLifecycle to pass "test-lifecycle" first, and increase sleep duration of dummy processes to 1.0s to ensure reliable process persistence under race detection.
Diffstat (limited to 'internal/wireguard/wireguard.go')
| -rw-r--r-- | internal/wireguard/wireguard.go | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/internal/wireguard/wireguard.go b/internal/wireguard/wireguard.go index 3c293b4..e250dab 100644 --- a/internal/wireguard/wireguard.go +++ b/internal/wireguard/wireguard.go @@ -98,15 +98,17 @@ func StartTunnel(cfg *wgconf.Config, dnsServer string) (t *Tunnel, err error) { return nil, fmt.Errorf("failed to configure network interface %s: %w", tunName, err) } + var dnsFile string if path, err := ConfigureResolvConf(dnsServer); err != nil { fmt.Printf("warning: failed to configure DNS resolver: %v\n", err) } else { - t.dnsFile = path + dnsFile = path } return &Tunnel{ - Device: wgDev, - Tun: tunDev, + Device: wgDev, + Tun: tunDev, + dnsFile: dnsFile, }, nil } @@ -194,10 +196,17 @@ func configureInterface(name, address string, mtu int) error { } } + var dst *net.IPNet + if addr.IP.To4() != nil { + _, dst, _ = net.ParseCIDR("0.0.0.0/0") + } else { + _, dst, _ = net.ParseCIDR("::/0") + } + route := &netlink.Route{ Scope: netlink.SCOPE_UNIVERSE, LinkIndex: link.Attrs().Index, - Dst: nil, + Dst: dst, } if err := netlink.RouteAdd(route); err != nil { |
