packet/bgp: Gaurd against extra data in the buffer
While attempting to peer with a vendor switch, parsing its BGPOptParamCapabilityGracefulRestart excepted due to the length of the identifier tuples not being a multiple of 4 octets. It appears that this might be common as other implementations also stop when the buffer is < 4. Signed-off-by: Jason Kölker <jason@koelker.net> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
a71c2a9e1b
commit
73416eacb1
@ -1270,7 +1270,7 @@ class BGPOptParamCapabilityGracefulRestart(_OptParamCapability):
|
|||||||
(restart, ) = struct.unpack_from(cls._CAP_PACK_STR, six.binary_type(buf))
|
(restart, ) = struct.unpack_from(cls._CAP_PACK_STR, six.binary_type(buf))
|
||||||
buf = buf[2:]
|
buf = buf[2:]
|
||||||
l = []
|
l = []
|
||||||
while len(buf) > 0:
|
while len(buf) >= 4:
|
||||||
l.append(struct.unpack_from("!HBB", buf))
|
l.append(struct.unpack_from("!HBB", buf))
|
||||||
buf = buf[4:]
|
buf = buf[4:]
|
||||||
return {'flags': restart >> 12, 'time': restart & 0xfff, 'tuples': l}
|
return {'flags': restart >> 12, 'time': restart & 0xfff, 'tuples': l}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user