sd-dhcp: don't reject packets with the 'wrong' source port

The RFC does not specify that the packets from the DHCP server must come from
the DHCP server port, only that that's where they should be sent.

This fixes a problem when running networkd in VirtualBox.

Thanks to Sébastien Luttringer for reporting the bug and very patiently testing
various fixes.
This commit is contained in:
Tom Gundersen
2014-02-23 22:59:43 +01:00
parent 5266a81ea2
commit 8fa2eeace7
+5 -5
View File
@@ -164,7 +164,7 @@ int dhcp_packet_verify_headers(DHCPPacket *packet, size_t len) {
return -EINVAL;
}
if (hdrlen + be16toh(packet->udp.len) > len) {
if (len < hdrlen + be16toh(packet->udp.len)) {
log_dhcp_client(client, "ignoring packet: packet (%zu bytes) "
"smaller than expected (%zu) by UDP header", len,
hdrlen + be16toh(packet->udp.len));
@@ -182,10 +182,10 @@ int dhcp_packet_verify_headers(DHCPPacket *packet, size_t len) {
}
}
if (be16toh(packet->udp.source) != DHCP_PORT_SERVER ||
be16toh(packet->udp.dest) != DHCP_PORT_CLIENT) {
log_dhcp_client(client, "ignoring packet: wrong ports (source: %u, destination: %u)",
be16toh(packet->udp.source), be16toh(packet->udp.dest));
if (be16toh(packet->udp.dest) != DHCP_PORT_CLIENT) {
log_dhcp_client(client, "ignoring packet: to port %u, which "
"is not the DHCP client port (%u)",
be16toh(packet->udp.dest), DHCP_PORT_CLIENT);
return -EINVAL;
}