dhcpcd: add diagnostics to valid_udp_packet
A UDP packet may be invalid for a number of reasons. When a packet
is found to be invalid, log the specific reason that we rejected it.
BUG=chromium:342102
TEST=network_DhcpRenew (doesn't test new functionality)
Change-Id: I8f4633cd3974fd10c2bada90842e9902dea0ea1c
Reviewed-on: https://chromium-review.googlesource.com/185511
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
Commit-Queue: mukesh agrawal <quiche@chromium.org>
diff --git a/net.c b/net.c
index b732f37..a501d92 100644
--- a/net.c
+++ b/net.c
@@ -719,6 +719,8 @@
uint16_t bytes, udpsum;
if (data_len < sizeof(packet.ip)) {
+ syslog(LOG_WARNING, "packet shorter than an ip header "
+ "(len=%zd)", data_len);
if (from)
from->s_addr = INADDR_ANY;
errno = EINVAL;
@@ -728,16 +730,20 @@
if (from)
from->s_addr = packet.ip.ip_src.s_addr;
if (data_len > sizeof(packet)) {
+ syslog(LOG_WARNING, "packet too long (%zd bytes)", data_len);
errno = EINVAL;
return -1;
}
if (checksum(&packet.ip, sizeof(packet.ip)) != 0) {
+ syslog(LOG_WARNING, "packet failed ip header checksum");
errno = EINVAL;
return -1;
}
bytes = ntohs(packet.ip.ip_len);
if (data_len < bytes) {
+ syslog(LOG_WARNING, "packet appears truncated "
+ "(len=%zd, ip_len=%zd)", data_len, bytes);
errno = EINVAL;
return -1;
}
@@ -752,6 +758,7 @@
packet.ip.ip_ttl = 0;
packet.ip.ip_sum = 0;
if (udpsum && checksum(&packet, bytes) != udpsum) {
+ syslog(LOG_WARNING, "packet failed udp checksum");
errno = EINVAL;
return -1;
}