diff options
author | ume <ume@FreeBSD.org> | 2001-10-22 12:43:30 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2001-10-22 12:43:30 +0000 |
commit | 44216e0fa08024321ac33003cc62a6297c31adad (patch) | |
tree | f6d7b6c5d5798206b224c7c75afc11cb3cc39f31 /sys/netinet | |
parent | d1e5587d3f0eb44193833694eea9b61554af5359 (diff) | |
download | FreeBSD-src-44216e0fa08024321ac33003cc62a6297c31adad.zip FreeBSD-src-44216e0fa08024321ac33003cc62a6297c31adad.tar.gz |
restore the data of the ip header when extended udp header and data checksum
is calculated. this caused some trouble in the code which the ip header
is not modified. for example, inbound policy lookup failed.
Obtained from: KAME
MFC after: 1 week
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/udp_usrreq.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 463f8b3..8090911 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -225,9 +225,12 @@ udp_input(m, off) m->m_pkthdr.csum_data + IPPROTO_UDP)); uh->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)); + bcopy(b, ((struct ipovly *)ip)->ih_x1, 9); } if (uh->uh_sum) { udpstat.udps_badsum++; |