diff options
| author | Michael Biebl <biebl@debian.org> | 2020-08-19 10:13:49 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2020-08-19 10:13:49 +0200 |
| commit | e7b44ef4c80907346ec7492a09c45277459924fc (patch) | |
| tree | b1388af193ca205f73336eca47e81815e43a61ca /shared/n-dhcp4/src/util | |
| parent | 136d191f1c96dbae1489fed7c2565f5e1b1f8d40 (diff) | |
New upstream version 1.26.2 upstream/1.26.2
Diffstat (limited to 'shared/n-dhcp4/src/util')
| -rw-r--r-- | shared/n-dhcp4/src/util/packet.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/shared/n-dhcp4/src/util/packet.c b/shared/n-dhcp4/src/util/packet.c index 38cb399d..95e65940 100644 --- a/shared/n-dhcp4/src/util/packet.c +++ b/shared/n-dhcp4/src/util/packet.c @@ -293,6 +293,8 @@ int packet_recvfrom_udp(int sockfd, ssize_t pktlen; size_t hdrlen; + *n_transmittedp = 0; + /* Peek packet to obtain the real IP header length */ pktlen = recv(sockfd, &ip_hdr.hdr, sizeof(ip_hdr.hdr), MSG_PEEK); if (pktlen < 0) @@ -304,7 +306,6 @@ int packet_recvfrom_udp(int sockfd, * discard it. */ recv(sockfd, NULL, 0, 0); - *n_transmittedp = 0; return 0; } @@ -313,7 +314,6 @@ int packet_recvfrom_udp(int sockfd, * This is not an IPv4 packet, discard it. */ recv(sockfd, NULL, 0, 0); - *n_transmittedp = 0; return 0; } @@ -324,7 +324,6 @@ int packet_recvfrom_udp(int sockfd, * header length, discard the packet. */ recv(sockfd, NULL, 0, 0); - *n_transmittedp = 0; return 0; } @@ -354,7 +353,6 @@ int packet_recvfrom_udp(int sockfd, * provided too small a buffer. In both cases, we simply drop * the packet. */ - *n_transmittedp = 0; return 0; } @@ -366,14 +364,12 @@ int packet_recvfrom_udp(int sockfd, * The packet is too small to even contain an entire UDP * header, so discard it entirely. */ - *n_transmittedp = 0; return 0; } else if ((size_t)pktlen < hdrlen + ntohs(udp_hdr.len)) { /* * The UDP header specified a longer length than the returned * packet, so discard it entirely. */ - *n_transmittedp = 0; return 0; } @@ -386,13 +382,10 @@ int packet_recvfrom_udp(int sockfd, /* IP */ if (ip_hdr.hdr.protocol != IPPROTO_UDP) { - *n_transmittedp = 0; return 0; /* not a UDP packet, discard it */ } else if (ip_hdr.hdr.frag_off & htons(IP_MF | IP_OFFMASK)) { - *n_transmittedp = 0; return 0; /* fragmented packet, discard it */ } else if (checksum && packet_internet_checksum(ip_hdr.data, hdrlen)) { - *n_transmittedp = 0; return 0; /* invalid checksum, discard it */ } @@ -411,7 +404,6 @@ int packet_recvfrom_udp(int sockfd, buf, pktlen, udp_hdr.check)) { - *n_transmittedp = 0; return 0; } } |