From c4f912a5258640d5177ad844e8cd182cf4341e5d Mon Sep 17 00:00:00 2001 From: "Nicholas J. Kain" Date: Fri, 12 Nov 2010 18:56:30 -0500 Subject: [PATCH] Fix a bug where a packet read would potentially stop before grabbing a full sized dhcp packet if one is available. --- ndhc/clientpacket.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ndhc/clientpacket.c b/ndhc/clientpacket.c index d88ce5f..fd7064d 100644 --- a/ndhc/clientpacket.c +++ b/ndhc/clientpacket.c @@ -179,11 +179,11 @@ int get_raw_packet(struct dhcpMessage *payload, int fd) ssize_t len = 0; const ssize_t header_size = sizeof(struct iphdr) + sizeof(struct udphdr); + const ssize_t packet_size = sizeof(struct udp_dhcp_packet); - memset(&packet, 0, sizeof(struct udp_dhcp_packet)); - while (len < header_size) { - ssize_t r = read(fd, &packet + len, - sizeof(struct udp_dhcp_packet) - len); + memset(&packet, 0, packet_size); + while (len < packet_size) { + ssize_t r = read(fd, &packet + len, packet_size - len); if (r == 0) break; if (r == -1) { @@ -241,7 +241,7 @@ int get_raw_packet(struct dhcpMessage *payload, int fd) sleep(1); return -2; } - if (len > (int)sizeof(struct udp_dhcp_packet)) { + if (len > packet_size) { log_line("Data longer than that of a IP+UDP+DHCP message"); sleep(1); return -2;