diff options
author | David Malone <dwmalone@FreeBSD.org> | 2007-06-10 07:34:28 +0000 |
---|---|---|
committer | David Malone <dwmalone@FreeBSD.org> | 2007-06-10 07:34:28 +0000 |
commit | a3ff700424a791bc6d5d4cdc377f39de5777621b (patch) | |
tree | fae77ac1557c57989ccfaacc284841a5988ed4e9 /sys | |
parent | b37842b29d867ba84784b7d475ef0e8b46c9d6dc (diff) | |
download | src-a3ff700424a791bc6d5d4cdc377f39de5777621b.tar.gz src-a3ff700424a791bc6d5d4cdc377f39de5777621b.zip |
MFC 1.209: Don't verify UDP IPv4 checksum in-place.
Notes
Notes:
svn path=/stable/4/; revision=170498
Diffstat (limited to 'sys')
-rw-r--r-- | sys/netinet/udp_usrreq.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index ff504502e628..7b1455db2c32 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -218,23 +218,24 @@ udp_input(m, off, proto) * Checksum extended UDP header and data. */ if (uh->uh_sum) { + u_short uh_sum; if (m->m_pkthdr.csum_flags & CSUM_DATA_VALID) { if (m->m_pkthdr.csum_flags & CSUM_PSEUDO_HDR) - uh->uh_sum = m->m_pkthdr.csum_data; + uh_sum = m->m_pkthdr.csum_data; else - uh->uh_sum = in_pseudo(ip->ip_src.s_addr, + uh_sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr, htonl((u_short)len + m->m_pkthdr.csum_data + IPPROTO_UDP)); - uh->uh_sum ^= 0xffff; + uh_sum ^= 0xffff; } else { char b[9]; bcopy(((struct ipovly *)ip)->ih_x1, b, 9); bzero(((struct ipovly *)ip)->ih_x1, 9); ((struct ipovly *)ip)->ih_len = uh->uh_ulen; - uh->uh_sum = in_cksum(m, len + sizeof (struct ip)); + uh_sum = in_cksum(m, len + sizeof (struct ip)); bcopy(b, ((struct ipovly *)ip)->ih_x1, 9); } - if (uh->uh_sum) { + if (uh_sum) { udpstat.udps_badsum++; m_freem(m); return; |