untrusted comment: verify with openbsd-63-base.pub
RWRxzbLwAd76ZTrrTD+k7XbjwiwSPll/Qm+hmSWoNQAclkn3WHM3qjEO6i0K0Ib3XROxbfT91n8GBHW14SLnLJxJL59CpD6MzQw=
OpenBSD 6.3 errata 030, 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-63-base.pub -x 030_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.209
diff -u -p -r1.209 pf_norm.c
--- sys/net/pf_norm.c 6 Feb 2018 09:16:11 -0000 1.209
+++ sys/net/pf_norm.c 27 Feb 2019 16:05:32 -0000
@@ -723,10 +723,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);