summaryrefslogtreecommitdiffstats
path: root/sys/netinet/udp_usrreq.c
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2001-10-22 12:43:30 +0000
committerume <ume@FreeBSD.org>2001-10-22 12:43:30 +0000
commit44216e0fa08024321ac33003cc62a6297c31adad (patch)
treef6d7b6c5d5798206b224c7c75afc11cb3cc39f31 /sys/netinet/udp_usrreq.c
parentd1e5587d3f0eb44193833694eea9b61554af5359 (diff)
downloadFreeBSD-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/udp_usrreq.c')
-rw-r--r--sys/netinet/udp_usrreq.c3
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++;
OpenPOWER on IntegriCloud