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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user