From 074ed9a4a99f4ceceda293cbd7431faeb0bb5600 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 25 Oct 2021 11:23:17 +0200 Subject: tunnel: cleanup IPs when masks don't match Signed-off-by: Jason A. Donenfeld --- tunnel/addressconfig.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'tunnel/addressconfig.go') diff --git a/tunnel/addressconfig.go b/tunnel/addressconfig.go index 575185e0..86b82097 100644 --- a/tunnel/addressconfig.go +++ b/tunnel/addressconfig.go @@ -23,18 +23,15 @@ func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, add if len(addresses) == 0 { return } - addrToStr := func(addr *net.IPNet) string { - ip := addr.IP + addrToStr := func(ip *net.IP) string { if ip4 := ip.To4(); ip4 != nil { - ip = ip4 + return string(ip4) } - ones, _ := addr.Mask.Size() - ip = append(ip, byte(ones)) - return string(ip) + return string(*ip) } addrHash := make(map[string]bool, len(addresses)) for i := range addresses { - addrHash[addrToStr(&addresses[i])] = true + addrHash[addrToStr(&addresses[i].IP)] = true } interfaces, err := winipcfg.GetAdaptersAddresses(family, winipcfg.GAAFlagDefault) if err != nil { @@ -46,8 +43,8 @@ func cleanupAddressesOnDisconnectedInterfaces(family winipcfg.AddressFamily, add } for address := iface.FirstUnicastAddress; address != nil; address = address.Next { ip := address.Address.IP() - ipnet := net.IPNet{IP: ip, Mask: net.CIDRMask(int(address.OnLinkPrefixLength), 8*len(ip))} - if addrHash[addrToStr(&ipnet)] { + if addrHash[addrToStr(&ip)] { + ipnet := net.IPNet{IP: ip, Mask: net.CIDRMask(int(address.OnLinkPrefixLength), 8*len(ip))} log.Printf("Cleaning up stale address %s from interface ā€˜%sā€™", ipnet.String(), iface.FriendlyName()) iface.LUID.DeleteIPAddress(ipnet) } -- cgit v1.2.3-59-g8ed1b