From f0ce8ac3e19d0c4e42323dde8d5db0d069ec99e2 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 10 Sep 2019 10:53:15 -0400 Subject: [PATCH] pimd: Slightly loosen pim assert message length tests The Pim RFC does not appear to state any length requirements of pim, other than the checksum must be correct. Certain vendors are sending extra data at the end of a pim assert message. This while not explicitly against the rules was a bit of surprise to pim when we threw the assert message on the floor for being too long. Modify the test to see if length left will allow us to read the 8 bytes of data that we need. If it is sufficient for that allow the packet to be used. Fixes: #4957 Signed-off-by: Donald Sharp --- pimd/pim_assert.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pimd/pim_assert.c b/pimd/pim_assert.c index 3aa2a92241..53ab22754c 100644 --- a/pimd/pim_assert.c +++ b/pimd/pim_assert.c @@ -259,11 +259,11 @@ int pim_assert_recv(struct interface *ifp, struct pim_neighbor *neigh, curr += offset; curr_size -= offset; - if (curr_size != 8) { + if (curr_size < 8) { char src_str[INET_ADDRSTRLEN]; pim_inet4_dump("", src_addr, src_str, sizeof(src_str)); zlog_warn( - "%s: preference/metric size is not 8: size=%d from %s on interface %s", + "%s: preference/metric size is less than 8 bytes: size=%d from %s on interface %s", __PRETTY_FUNCTION__, curr_size, src_str, ifp->name); return -3; }