summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ipsec_input.c
diff options
context:
space:
mode:
authorsperreault <sperreault@openbsd.org>2011-12-21 14:53:26 +0000
committersperreault <sperreault@openbsd.org>2011-12-21 14:53:26 +0000
commit6c9cee5a8bfc51bb7b77cab4d911ff0d8ef17429 (patch)
tree1f1e8fd4acb201a088e80f26b0b10fc9eb23a7b2 /sys/netinet/ipsec_input.c
parentdon't attempt to run pf_translate on fragments: it will fail miserably. (diff)
downloadwireguard-openbsd-6c9cee5a8bfc51bb7b77cab4d911ff0d8ef17429.tar.xz
wireguard-openbsd-6c9cee5a8bfc51bb7b77cab4d911ff0d8ef17429.zip
Compute mandatory UDP checksum for IPv6 packets
ok yasuoka@ bluhm@
Diffstat (limited to 'sys/netinet/ipsec_input.c')
-rw-r--r--sys/netinet/ipsec_input.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/netinet/ipsec_input.c b/sys/netinet/ipsec_input.c
index 226399271a6..e770541105b 100644
--- a/sys/netinet/ipsec_input.c
+++ b/sys/netinet/ipsec_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ipsec_input.c,v 1.104 2011/12/19 02:43:19 yasuoka Exp $ */
+/* $OpenBSD: ipsec_input.c,v 1.105 2011/12/21 14:53:26 sperreault Exp $ */
/*
* The authors of this code are John Ioannidis (ji@tla.org),
* Angelos D. Keromytis (kermit@csd.uch.gr) and
@@ -577,6 +577,14 @@ ipsec_common_input_cb(struct mbuf *m, struct tdb *tdbp, int skip, int protoff,
cksum = 0;
m_copyback(m, skip + offsetof(struct udphdr, uh_sum),
sizeof(cksum), &cksum, M_NOWAIT);
+#ifdef INET6
+ if (af == AF_INET6) {
+ cksum = in6_cksum(m, IPPROTO_UDP, skip,
+ m->m_pkthdr.len - skip);
+ m_copyback(m, skip + offsetof(struct udphdr,
+ uh_sum), sizeof(cksum), &cksum, M_NOWAIT);
+ }
+#endif
break;
case IPPROTO_TCP:
if (m->m_pkthdr.len < skip + sizeof(struct tcphdr)) {