From 30b544edc4248221f5975293ff01d6b7103c9495 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Mon, 17 Feb 2020 19:43:22 -0500 Subject: [PATCH] zebra: Fix checksum calculation to not include old checksum As part of checksum calculation for a received packet we were comparing the checksum returned from in_cksum. Typically when we calculate the checksum the value stored in the checksum must be all 0's. Store the received checksum and then set the checksum to 0 and then compare. Signed-off-by: Donald Sharp --- zebra/irdp_packet.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/zebra/irdp_packet.c b/zebra/irdp_packet.c index 450dfbece3..13dcab9294 100644 --- a/zebra/irdp_packet.c +++ b/zebra/irdp_packet.c @@ -78,6 +78,7 @@ static void parse_irdp_packet(char *p, int len, struct interface *ifp) int ip_hlen, iplen, datalen; struct zebra_if *zi; struct irdp_interface *irdp; + uint16_t saved_chksum; zi = ifp->info; if (!zi) @@ -121,8 +122,10 @@ static void parse_irdp_packet(char *p, int len, struct interface *ifp) icmp = (struct icmphdr *)(p + ip_hlen); + saved_chksum = icmp->checksum; + icmp->checksum = 0; /* check icmp checksum */ - if (in_cksum(icmp, datalen) != icmp->checksum) { + if (in_cksum(icmp, datalen) != saved_chksum) { flog_warn( EC_ZEBRA_IRDP_BAD_CHECKSUM, "IRDP: RX ICMP packet from %s. Bad checksum, silently ignored", -- 2.39.5