From b09f24d11651e555c529028cadde2d365d6e2436 Mon Sep 17 00:00:00 2001 From: Arko Dasgupta Date: Thu, 2 Apr 2020 21:21:47 -0700 Subject: [PATCH] Fix NPE due to null value returned by ep.Iface() This PR carryforwards https://github.com/moby/libnetwork/pull/2239 and incorporates the suggestions in comments to fix the NPE and potential NPEs due to a null value returned by ep.Iface() Signed-off-by: Arko Dasgupta (cherry picked from commit c55657fd53dd26c8f7a828aed9aaa63441f3c6f4) Signed-off-by: Sebastiaan van Stijn --- agent.go | 4 ++-- controller.go | 4 ++++ network.go | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9/agent.go libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9-b/agent.go index c90fa81..550f310 100644 --- libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9/agent.go +++ libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9-b/agent.go @@ -583,7 +583,7 @@ func (ep *endpoint) deleteDriverInfoFromCluster() error { } func (ep *endpoint) addServiceInfoToCluster(sb *sandbox) error { - if ep.isAnonymous() && len(ep.myAliases) == 0 || ep.Iface().Address() == nil { + if ep.isAnonymous() && len(ep.myAliases) == 0 || ep.Iface() == nil || ep.Iface().Address() == nil { return nil } @@ -706,7 +706,7 @@ func (ep *endpoint) deleteServiceInfoFromCluster(sb *sandbox, fullRemove bool, m } } - if ep.Iface().Address() != nil { + if ep.Iface() != nil && ep.Iface().Address() != nil { if ep.svcID != "" { // This is a task part of a service var ingressPorts []*PortConfig diff --git libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9/controller.go libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9-b/controller.go index f3b6b02..99f4074 100644 --- libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9/controller.go +++ libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9-b/controller.go @@ -952,6 +952,10 @@ func (c *controller) reservePools() { continue } for _, ep := range epl { + if ep.Iface() == nil { + logrus.Warnf("endpoint interface is empty for %q (%s)", ep.Name(), ep.ID()) + continue + } if err := ep.assignAddress(ipam, true, ep.Iface().AddressIPv6() != nil); err != nil { logrus.Warnf("Failed to reserve current address for endpoint %q (%s) on network %q (%s)", ep.Name(), ep.ID(), n.Name(), n.ID()) diff --git libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9/network.go libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9-b/network.go index 5ca660c..f69b27f 100644 --- libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9/network.go +++ libnetwork-d00ceed44cc447c77f25cdf5d59e83163bdcb4c9-b/network.go @@ -1314,7 +1314,7 @@ func (n *network) EndpointByID(id string) (Endpoint, error) { func (n *network) updateSvcRecord(ep *endpoint, localEps []*endpoint, isAdd bool) { var ipv6 net.IP epName := ep.Name() - if iface := ep.Iface(); iface.Address() != nil { + if iface := ep.Iface(); iface != nil && iface.Address() != nil { myAliases := ep.MyAliases() if iface.AddressIPv6() != nil { ipv6 = iface.AddressIPv6().IP -- 2.9.3.windows.1