From 4fc6a891963a04f6df490158423a9328c589ccd4 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 25 Sep 2025 14:59:41 -0400 Subject: dgram: Verify CRC32 checksum upon RX Signed-off-by: Ian Moffett --- src/dgram/dgram_link.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/dgram/dgram_link.c b/src/dgram/dgram_link.c index 47646d6..03c4159 100644 --- a/src/dgram/dgram_link.c +++ b/src/dgram/dgram_link.c @@ -36,6 +36,7 @@ #include #include "if_ether.h" #include "dgram.h" +#include "crc.h" tx_len_t dgram_send(struct onet_link *link, mac_addr_t dst, void *buf, uint16_t len) @@ -80,13 +81,16 @@ dgram_send(struct onet_link *link, mac_addr_t dst, void *buf, uint16_t len) return len; } +#include rx_len_t dgram_recv(struct onet_link *link, void *buf, uint16_t len) { socklen_t addr_len; struct sockaddr_ll saddr; + struct onet_dgram *o1p_hdr; struct ether_hdr *hdr; size_t dgram_len, recv_len; + uint32_t crc; uint16_t proto; mac_addr_t dest_mac; char *p; @@ -133,6 +137,12 @@ dgram_recv(struct onet_link *link, void *buf, uint16_t len) continue; } + o1p_hdr = DGRAM_HDR(p); + crc = crc32(o1p_hdr, sizeof(*o1p_hdr) - sizeof(crc)); + if (crc != o1p_hdr->crc32) { + continue; + } + /* If this is for everyone, take it */ if (dest_mac == MAC_BROADCAST) { break; -- cgit v1.2.3