untrusted comment: verify with openbsd-64-base.pub
RWQq6XmS4eDAcSEH7nmDNqOnhZqTvJZeTHqOhsDnaqVyRUC0apDsnvAsL7fochPDsukTGS8UMjD2djL2XdDTZRS/v+IMVjlK6Q0=
OpenBSD 6.4 errata 014, March 1, 2019:
Fragmented IPv6 packets may be erroneously passed by pf or lead to a crash.
Apply by doing:
signify -Vep /etc/signify/openbsd-64-base.pub -x 014_pf6frag.patch.sig \
-m - | (cd /usr/src && patch -p0)
And then rebuild and install a new kernel:
KK=`sysctl -n kern.osversion | cut -d# -f1`
cd /usr/src/sys/arch/`machine`/compile/$KK
make obj
make config
make
make install
Index: sys/net/pf_norm.c
===================================================================
RCS file: /cvs/src/sys/net/pf_norm.c,v
retrieving revision 1.216
diff -u -p -r1.216 pf_norm.c
--- sys/net/pf_norm.c 10 Sep 2018 16:14:07 -0000 1.216
+++ sys/net/pf_norm.c 27 Feb 2019 16:06:34 -0000
@@ -877,10 +877,10 @@ pf_reassemble6(struct mbuf **m0, struct
}
/* We have all the data */
- extoff = frent->fe_extoff;
- maxlen = frag->fr_maxlen;
frent = TAILQ_FIRST(&frag->fr_queue);
KASSERT(frent != NULL);
+ extoff = frent->fe_extoff;
+ maxlen = frag->fr_maxlen;
total = TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_off +
TAILQ_LAST(&frag->fr_queue, pf_fragq)->fe_len;
hdrlen = frent->fe_hdrlen - sizeof(struct ip6_frag);