Do bounds checking on the BondEthernet and VXLAN Tunnel instances

This commit is contained in:
Pim van Pelt
2022-04-03 14:40:44 +00:00
parent 79f41d447d
commit 720f581e47
4 changed files with 60 additions and 0 deletions

View File

@ -70,6 +70,10 @@ def validate_bondethernets(yaml):
result = False result = False
else: else:
bond_mtu = interface.get_mtu(yaml, bond_ifname) bond_mtu = interface.get_mtu(yaml, bond_ifname)
instance = int(ifname[12:])
if instance > 4294967294:
msgs.append("bondethernet %s has instance %d which is too large" % (ifname, instance))
result = False
for member in iface['interfaces']: for member in iface['interfaces']:
if (None, None) == interface.get_by_name(yaml, member): if (None, None) == interface.get_by_name(yaml, member):

View File

@ -66,6 +66,11 @@ def validate_vxlan_tunnels(yaml):
for ifname, iface in yaml['vxlan_tunnels'].items(): for ifname, iface in yaml['vxlan_tunnels'].items():
logger.debug("vxlan_tunnel %s: %s" % (ifname, iface)) logger.debug("vxlan_tunnel %s: %s" % (ifname, iface))
instance = int(ifname[12:])
if instance > 2147483647:
msgs.append("vxlan_tunnel %s has instance %d which is too large" % (ifname, instance))
result = False
vni = iface['vni'] vni = iface['vni']
if not vni_unique(yaml, vni): if not vni_unique(yaml, vni):
msgs.append("vxlan_tunnel %s VNI %d is not unique" % (ifname, vni)) msgs.append("vxlan_tunnel %s VNI %d is not unique" % (ifname, vni))

View File

@ -0,0 +1,29 @@
test:
description: "BondEthernets must be between 0 and 4294967294"
errors:
expected:
- "bondethernet .* has instance .* which is too large"
count: 1
---
bondethernets:
BondEthernet4294967294:
interfaces: [ GigabitEthernet1/0/0, GigabitEthernet1/0/1 ]
BondEthernet4294967295:
interfaces: [ GigabitEthernet2/0/0, GigabitEthernet2/0/1 ]
interfaces:
GigabitEthernet1/0/0:
mtu: 1500
GigabitEthernet1/0/1:
mtu: 1500
GigabitEthernet2/0/0:
mtu: 1500
GigabitEthernet2/0/1:
mtu: 1500
BondEthernet4294967294:
description: "Cool"
BondEthernet4294967295:
description: "Not cool"

View File

@ -0,0 +1,22 @@
test:
description: "A VXLAN tunnel instance must be within [0,2G)"
errors:
expected:
- "vxlan_tunnel .* has instance .* which is too large"
count: 1
---
vxlan_tunnels:
vxlan_tunnel2147483647:
local: 192.0.2.1
remote: 192.0.2.2
vni: 100
vxlan_tunnel2147483648:
local: 2001:db8::1
remote: 2001:db8::2
vni: 101
interfaces:
vxlan_tunnel2147483647:
description: "Cool."
vxlan_tunnel2147483648:
description: "Not cool."