Fix a bug where a packet read would potentially stop before grabbing
a full sized dhcp packet if one is available.
This commit is contained in:
parent
955031bce1
commit
c4f912a525
@ -179,11 +179,11 @@ int get_raw_packet(struct dhcpMessage *payload, int fd)
|
|||||||
|
|
||||||
ssize_t len = 0;
|
ssize_t len = 0;
|
||||||
const ssize_t header_size = sizeof(struct iphdr) + sizeof(struct udphdr);
|
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));
|
memset(&packet, 0, packet_size);
|
||||||
while (len < header_size) {
|
while (len < packet_size) {
|
||||||
ssize_t r = read(fd, &packet + len,
|
ssize_t r = read(fd, &packet + len, packet_size - len);
|
||||||
sizeof(struct udp_dhcp_packet) - len);
|
|
||||||
if (r == 0)
|
if (r == 0)
|
||||||
break;
|
break;
|
||||||
if (r == -1) {
|
if (r == -1) {
|
||||||
@ -241,7 +241,7 @@ int get_raw_packet(struct dhcpMessage *payload, int fd)
|
|||||||
sleep(1);
|
sleep(1);
|
||||||
return -2;
|
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");
|
log_line("Data longer than that of a IP+UDP+DHCP message");
|
||||||
sleep(1);
|
sleep(1);
|
||||||
return -2;
|
return -2;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user