Skip to content

Commit 84109c9

Browse files
committed
Verify that EgressIPs are on the expected subnet
1 parent 2dde61f commit 84109c9

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

pkg/network/node/egressip.go

+8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ type egressIPWatcher struct {
5252
namespacesByEgressIP map[string]*namespaceEgress
5353

5454
localEgressLink netlink.Link
55+
localEgressNet *net.IPNet
5556
localEgressIPMaskLen int
5657

5758
testModeChan chan string
@@ -97,6 +98,10 @@ func (eip *egressIPWatcher) findEgressLink() error {
9798

9899
for _, addr := range addrs {
99100
if addr.IP.String() == eip.localIP {
101+
_, eip.localEgressNet, err = net.ParseCIDR(addr.IPNet.String())
102+
if err != nil {
103+
return fmt.Errorf("could not parse CIDR network from address %q: %v", addr.IP.String(), err)
104+
}
100105
eip.localEgressLink = link
101106
eip.localEgressIPMaskLen, _ = addr.Mask.Size()
102107
return nil
@@ -287,6 +292,9 @@ func (eip *egressIPWatcher) claimEgressIP(egressIP, egressHex string) error {
287292
if err != nil {
288293
return fmt.Errorf("could not parse egress IP %q: %v", egressIPNet, err)
289294
}
295+
if !eip.localEgressNet.Contains(addr.IP) {
296+
return fmt.Errorf("egress IP %q is not in local network %s of interface %s", egressIP, eip.localEgressNet.String(), eip.localEgressLink.Attrs().Name)
297+
}
290298
err = netlink.AddrAdd(eip.localEgressLink, addr)
291299
if err != nil {
292300
return fmt.Errorf("could not add egress IP %q to %s: %v", egressIPNet, eip.localEgressLink.Attrs().Name, err)

0 commit comments

Comments
 (0)