From 8fa2eeace7beecedb01c82811e28949cacec1236 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sun, 23 Feb 2014 19:21:50 +0100 Subject: [PATCH] sd-dhcp: don't reject packets with the 'wrong' source port MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- src/libsystemd-dhcp/dhcp-packet.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libsystemd-dhcp/dhcp-packet.c b/src/libsystemd-dhcp/dhcp-packet.c index 8f9ec43c4..13881ea0d 100644 --- a/src/libsystemd-dhcp/dhcp-packet.c +++ b/src/libsystemd-dhcp/dhcp-packet.c @@ -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; } -- 2.30.2