diff options
author | 2011-12-21 14:53:26 +0000 | |
---|---|---|
committer | 2011-12-21 14:53:26 +0000 | |
commit | 6c9cee5a8bfc51bb7b77cab4d911ff0d8ef17429 (patch) | |
tree | 1f1e8fd4acb201a088e80f26b0b10fc9eb23a7b2 /sys/netinet/ipsec_input.c | |
parent | don't attempt to run pf_translate on fragments: it will fail miserably. (diff) | |
download | wireguard-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.c | 10 |
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)) { |