mirror of
https://github.com/systemd/systemd.git
synced 2024-10-28 11:55:44 +03:00
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:
parent
e44127018a
commit
1aed1cbc10
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user