pf dealt poorly with certain types of IPV6 icmp packets.

Apply by doing:
       cd /usr/src
       patch -p0 < 006_pf.patch
And then rebuild your kernel.

Index: sys/net/pf.c
===================================================================
RCS file: /cvs/src/sys/net/pf.c,v
retrieving revision 1.163
diff -u -r1.163 pf.c
--- sys/net/pf.c        15 Oct 2001 16:22:21 -0000      1.163
+++ sys/net/pf.c        13 Nov 2001 18:08:05 -0000
@@ -1,4 +1,4 @@
-/*     $OpenBSD: pf.c,v 1.163 2001/10/15 16:22:21 dhartmei Exp $ */
+/*     $OpenBSD: pf.c,v 1.166 2001/11/13 17:45:26 frantzen Exp $ */

/*
 * Copyright (c) 2001 Daniel Hartmeier
@@ -3953,12 +3953,8 @@
                       pd2.src = (struct pf_addr *)&h2_6.ip6_src;
                       pd2.dst = (struct pf_addr *)&h2_6.ip6_dst;
                       pd2.ip_sum = NULL;
+                       off2 = ipoff2 + sizeof(h2_6);
                       do {
-                               while (off >= m->m_len) {
-                                       off -= m->m_len;
-                                       m = m->m_next;
-                               }
-
                               switch (pd2.proto) {
                               case IPPROTO_FRAGMENT:
                                       /* XXX we don't handle fagments yet */
@@ -3968,11 +3964,16 @@
                               case IPPROTO_ROUTING:
                               case IPPROTO_DSTOPTS: {
                                       /* get next header and header length */
-                                       struct _opt6 *opt6;
+                                       struct _opt6 opt6;

-                                       opt6 = (struct _opt6 *)(mtod(m, caddr_t) + off2);
-                                       pd2.proto = opt6->opt6_nxt;
-                                       off2 += (opt6->opt6_hlen + 1) * 8;
+                                       if (!pf_pull_hdr(m, off2, &opt6,
+                                           sizeof(opt6), NULL, NULL, pd2.af)) {
+                                               DPFPRINTF(PF_DEBUG_MISC,
+                                                   ("pf:  ICMPv6 short opt\n"));
+                                               return(PF_DROP);
+                                       }
+                                       pd2.proto = opt6.opt6_nxt;
+                                       off2 += (opt6.opt6_hlen + 1) * 8;
                                       /* goto the next header */
                                       break;
                               }