Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 592750 Details for
Bug 697672
net-misc/dhcpcd-8.1.0: checksum failure from dhcp.server.ip.addy
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Fixes issues
dhcpcd-cksum.diff (text/plain), 1.86 KB, created by
Roy Marples
on 2019-10-15 09:09:56 UTC
(
hide
)
Description:
Fixes issues
Filename:
MIME Type:
Creator:
Roy Marples
Created:
2019-10-15 09:09:56 UTC
Size:
1.86 KB
patch
obsolete
>commit e6ad9175ce0874a4faec2abb594fc3099216d2b3 >Author: Maxime Villard <max@m00nbsd.net> >Date: Tue Oct 15 09:57:26 2019 +0100 > > dhcp: Fix incoming verification and checksum routines > > While here remove unused get_option_raw define. > >diff --git a/src/dhcp.c b/src/dhcp.c >index ab0ae90b..ed0ffa48 100644 >--- a/src/dhcp.c >+++ b/src/dhcp.c >@@ -164,8 +164,6 @@ dhcp_printoptions(const struct dhcpcd_ctx *ctx, > } > } > >-#define get_option_raw(ctx, bootp, bootp_len, opt) \ >- get_option((ctx), (bootp), (bootp_len), NULL) > static const uint8_t * > get_option(struct dhcpcd_ctx *ctx, > const struct bootp *bootp, size_t bootp_len, >@@ -3277,7 +3275,7 @@ is_packet_udp_bootp(void *packet, size_t plen) > size_t ip_hlen; > struct udphdr *udp; > >- if (sizeof(*ip) > plen) >+ if (plen < sizeof(*ip)) > return false; > > if (ip->ip_v != IPVERSION || ip->ip_p != IPPROTO_UDP) >@@ -3288,12 +3286,21 @@ is_packet_udp_bootp(void *packet, size_t plen) > return false; > > ip_hlen = (size_t)ip->ip_hl * 4; >+ if (ip_hlen < sizeof(*ip)) >+ return false; >+ > /* Check we have a UDP header and BOOTP. */ > if (ip_hlen + sizeof(*udp) + offsetof(struct bootp, vend) > plen) > return false; > >- /* Check it's to and from the right ports. */ >+ /* Sanity. */ > udp = (struct udphdr *)(void *)((char *)ip + ip_hlen); >+ if (ntohs(udp->uh_ulen) < sizeof(*udp)) >+ return false; >+ if (ip_hlen + ntohs(udp->uh_ulen) != plen) >+ return false; >+ >+ /* Check it's to and from the right ports. */ > if (udp->uh_dport != htons(BOOTPC) || udp->uh_sport != htons(BOOTPS)) > return false; > >@@ -3324,11 +3331,11 @@ checksums_valid(void *packet, > return false; > > if (flags & BPF_PARTIALCSUM) >- return 0; >+ return true; > > udp = (struct udphdr *)(void *)((char *)ip + ip_hlen); > if (udp->uh_sum == 0) >- return 0; >+ return true; > > /* UDP checksum is based on a pseudo IP header alongside > * the UDP header and payload. */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 697672
:
592746
|
592750
|
592758
|
594184