Преглед изворни кода

Merge pull request #116 from mavenugo/master

Incorrect assumption with golang net package causes Overlapping IP
Jana Radhakrishnan пре 10 година
родитељ
комит
288a6b8c49
2 измењених фајлова са 4 додато и 2 уклоњено
  1. 1 1
      libnetwork/drivers/bridge/setup_ipv4.go
  2. 3 1
      libnetwork/netutils/utils.go

+ 1 - 1
libnetwork/drivers/bridge/setup_ipv4.go

@@ -35,7 +35,7 @@ func init() {
 			log.Errorf("Failed to parse address %s", addr)
 			log.Errorf("Failed to parse address %s", addr)
 			continue
 			continue
 		}
 		}
-		net.IP = ip
+		net.IP = ip.To4()
 		bridgeNetworks = append(bridgeNetworks, net)
 		bridgeNetworks = append(bridgeNetworks, net)
 	}
 	}
 }
 }

+ 3 - 1
libnetwork/netutils/utils.go

@@ -192,7 +192,9 @@ func CheckRouteOverlaps(toCheck *net.IPNet) error {
 
 
 // NetworkOverlaps detects overlap between one IPNet and another
 // NetworkOverlaps detects overlap between one IPNet and another
 func NetworkOverlaps(netX *net.IPNet, netY *net.IPNet) bool {
 func NetworkOverlaps(netX *net.IPNet, netY *net.IPNet) bool {
-	if len(netX.IP) == len(netY.IP) {
+	// Check if both netX and netY are ipv4 or ipv6
+	if (netX.IP.To4() != nil && netY.IP.To4() != nil) ||
+		(netX.IP.To4() == nil && netY.IP.To4() == nil) {
 		if firstIP, _ := NetworkRange(netX); netY.Contains(firstIP) {
 		if firstIP, _ := NetworkRange(netX); netY.Contains(firstIP) {
 			return true
 			return true
 		}
 		}