diff --git a/src/dhcp.c b/src/dhcp.c index 37dc9e8..8528265 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -132,7 +132,10 @@ static int udp_checksum(struct ip_udp_dhcp_packet *packet) .protocol = packet->ip.protocol, .tot_len = packet->udp.len, }; - uint16_t udpcs = net_checksum161c(&packet->udp, ntohs(packet->udp.len)); + uint16_t udpcs = + net_checksum161c(&packet->udp, + min_size_t(ntohs(packet->udp.len), + sizeof *packet - sizeof(struct iphdr))); uint16_t hdrcs = net_checksum161c(&ph, sizeof ph); uint16_t cs = net_checksum161c_add(udpcs, hdrcs); return cs == 0;