← Commit list

2d576e2a2

Johannes Stezenbach
Johannes Stezenbach
2013-10-28
SUCCESS Duration: 179s

Subject

udhcpc: make DHCP packets to have at least 300 DHCP bytes

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

networking/udhcp/packet.c+9 -0
@@ -143,8 +143,15 @@ int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
*
* In order to work with those buggy servers,
* we truncate packets after end option byte.
+ *
+ * However, RFC 1542 says "The IP Total Length and UDP Length
+ * must be large enough to contain the minimal BOOTP header of 300 octets".
+ * Thus, we retain enough padding to not go below 300 BOOTP bytes.
+ * Some devices have filters which drop DHCP packets shorter than that.
*/
padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(packet.data.options);
+ if (padding > DHCP_SIZE - 300)
+ padding = DHCP_SIZE - 300;
packet.ip.protocol = IPPROTO_UDP;
packet.ip.saddr = source_nip;
@@ -215,6 +222,8 @@ int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
udhcp_dump_packet(dhcp_pkt);
padding = DHCP_OPTIONS_BUFSIZE - 1 - udhcp_end_option(dhcp_pkt->options);
+ if (padding > DHCP_SIZE - 300)
+ padding = DHCP_SIZE - 300;
result = safe_write(fd, dhcp_pkt, DHCP_SIZE - padding);
msg = "write";
ret_close: