summaryrefslogtreecommitdiffstats
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
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
-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