aboutsummaryrefslogtreecommitdiff
path: root/sys/netpfil/pf
diff options
context:
space:
mode:
authorErmal Luçi <eri@FreeBSD.org>2014-11-19 13:31:08 +0000
committerErmal Luçi <eri@FreeBSD.org>2014-11-19 13:31:08 +0000
commit7b56cc430a261630677f614b1cf4283e6ebb34fc (patch)
tree129c630d6e982bc65359a2632d551a4bc7905e8d /sys/netpfil/pf
parentb3a9e657c3e9c4e59b7ae14c6e2f0b3cbe309e1b (diff)
downloadsrc-7b56cc430a261630677f614b1cf4283e6ebb34fc.tar.gz
src-7b56cc430a261630677f614b1cf4283e6ebb34fc.zip
pf(4) needs to have a correct checksum during its processing.
Calculate checksums for the IPv6 path when needed before delving into pf(4) code as required. PR: 172648, 179392 Reviewed by: glebius@ Approved by: gnn@ Obtained from: pfSense MFC after: 1 week Sponsored by: Netgate
Notes
Notes: svn path=/head/; revision=274709
Diffstat (limited to 'sys/netpfil/pf')
-rw-r--r--sys/netpfil/pf/pf_ioctl.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index dba56745fae8..213e49cb52f5 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -76,6 +76,7 @@ __FBSDID("$FreeBSD$");
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_var.h>
+#include <netinet6/ip6_var.h>
#include <netinet/ip_icmp.h>
#ifdef INET6
@@ -3619,12 +3620,11 @@ pf_check6_out(void *arg, struct mbuf **m, struct ifnet *ifp, int dir,
int chk;
/* We need a proper CSUM before we start (s. OpenBSD ip_output) */
- if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
-#ifdef INET
- /* XXX-BZ copy&paste error from r126261? */
- in_delayed_cksum(*m);
-#endif
- (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
+ if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
+ in6_delayed_cksum(*m,
+ (*m)->m_pkthdr.len - sizeof(struct ip6_hdr),
+ sizeof(struct ip6_hdr));
+ (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
}
CURVNET_SET(ifp->if_vnet);
chk = pf_test6(PF_OUT, ifp, m, inp);