X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-network%2Fdhcp-packet.c;h=3b62c2572f52608f7990b64bb20355319ca6a21a;hp=bed942fd84345d0af51fa80dd3b9efe973408c16;hb=6e34949d7207f9dff4e2b01a3037a0af88e1c25c;hpb=a838c939a3a50b7318efac7b960392ca8d13bb1e diff --git a/src/libsystemd-network/dhcp-packet.c b/src/libsystemd-network/dhcp-packet.c index bed942fd8..3b62c2572 100644 --- a/src/libsystemd-network/dhcp-packet.c +++ b/src/libsystemd-network/dhcp-packet.c @@ -130,6 +130,11 @@ int dhcp_packet_verify_headers(DHCPPacket *packet, size_t len, bool checksum) { return -EINVAL; } + if (packet->ip.version != IPVERSION) { + log_dhcp_client(client, "ignoring packet: not IPv4"); + return -EINVAL; + } + if (packet->ip.ihl < 5) { log_dhcp_client(client, "ignoring packet: IPv4 IHL (%u words) invalid", packet->ip.ihl); @@ -157,6 +162,11 @@ int dhcp_packet_verify_headers(DHCPPacket *packet, size_t len, bool checksum) { /* UDP */ + if (packet->ip.protocol != IPPROTO_UDP) { + log_dhcp_client(client, "ignoring packet: not UDP"); + return -EINVAL; + } + if (len < DHCP_IP_UDP_SIZE) { log_dhcp_client(client, "ignoring packet: packet (%zu bytes) " " smaller than IP+UDP header (%u bytes)", len,