summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-08-30 08:54:33 -0400
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2023-08-31 01:22:16 +0000
commit9bbefbad9f1e6442ee93b131031277c0b1cc00e1 (patch)
tree8ad6208ab903355ed209daf653833af0f4d1a4a7
parent1622c2ece2f68e034b43fb037503514c2195aba5 (diff)
pimd: When receiving a packet be more careful with length in pim_pim_packet
a) If the length passed is the header length then it is possible that assignment of data will happen without data actually existing. b) Just move the assignment to after we ensure that the pim packet received is the minimum possible length that can be received. Signed-off-by: Donald Sharp <sharpd@nvidia.com> (cherry picked from commit 3163c64d2893b5411d299952ff16dfc05e2c7a86)
-rw-r--r--pimd/pim_pim.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c
index 6a926fae86..9c90846b61 100644
--- a/pimd/pim_pim.c
+++ b/pimd/pim_pim.c
@@ -168,7 +168,7 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len,
bool no_fwd;
#if PIM_IPV == 4
- if (len < sizeof(*ip_hdr)) {
+ if (len <= sizeof(*ip_hdr)) {
if (PIM_DEBUG_PIM_PACKETS)
zlog_debug(
"PIM packet size=%zu shorter than minimum=%zu",
@@ -202,7 +202,6 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len,
iovp->iov_len = pim_msg_len;
iovp++;
- header = (struct pim_msg_header *)pim_msg;
if (pim_msg_len < PIM_PIM_MIN_LEN) {
if (PIM_DEBUG_PIM_PACKETS)
zlog_debug(
@@ -210,6 +209,7 @@ int pim_pim_packet(struct interface *ifp, uint8_t *buf, size_t len,
pim_msg_len, PIM_PIM_MIN_LEN);
return -1;
}
+ header = (struct pim_msg_header *)pim_msg;
if (header->ver != PIM_PROTO_VERSION) {
if (PIM_DEBUG_PIM_PACKETS)