chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libsystemd-dhcp: Compute UDP checksum only if set
[elogind.git]
/
src
/
libsystemd-dhcp
/
sd-dhcp-client.c
diff --git
a/src/libsystemd-dhcp/sd-dhcp-client.c
b/src/libsystemd-dhcp/sd-dhcp-client.c
index 130a61d6f8d6dceff59516259905d077e87e571b..37fad9a30159f915eb53ae218ff92660d3199865 100644
(file)
--- a/
src/libsystemd-dhcp/sd-dhcp-client.c
+++ b/
src/libsystemd-dhcp/sd-dhcp-client.c
@@
-838,13
+838,18
@@
static int client_verify_headers(sd_dhcp_client *client, DHCPPacket *message,
hdrlen))
return -EINVAL;
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;
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;
if (be16toh(message->udp.source) != DHCP_PORT_SERVER ||
be16toh(message->udp.dest) != DHCP_PORT_CLIENT)
return -EINVAL;