libsystemd-dhcp: Compute UDP checksum only if set

A checksum field with value zero means no UDP checksum has been
computed for the packet.
This commit is contained in:
Patrik Flykt 2014-01-31 11:31:23 +02:00 committed by Tom Gundersen
parent e44127018a
commit 1aed1cbc10

View file

@ -838,13 +838,18 @@ static int client_verify_headers(sd_dhcp_client *client, DHCPPacket *message,
hdrlen))
return -EINVAL;
message->ip.check = message->udp.len;
message->ip.ttl = 0;
if (hdrlen + be16toh(message->udp.len) > len ||
client_checksum(&message->ip.ttl, be16toh(message->udp.len) + 12))
if (hdrlen + be16toh(message->udp.len) > len)
return -EINVAL;
if (message->udp.check) {
message->ip.check = message->udp.len;
message->ip.ttl = 0;
if (client_checksum(&message->ip.ttl,
be16toh(message->udp.len) + 12))
return -EINVAL;
}
if (be16toh(message->udp.source) != DHCP_PORT_SERVER ||
be16toh(message->udp.dest) != DHCP_PORT_CLIENT)
return -EINVAL;