Apply by doing:
       cd /usr/src
       patch -p0 < 005_ipopts.patch

And then rebuild your kernel.

Index: sys/netinet/ip_icmp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_icmp.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- sys/netinet/ip_icmp.c       1999/12/28 07:43:40     1.20
+++ sys/netinet/ip_icmp.c       2000/05/15 11:07:32     1.21
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_icmp.c,v 1.20 1999/12/28 07:43:40 itojun Exp $     */
+/*     $OpenBSD: ip_icmp.c,v 1.21 2000/05/15 11:07:32 itojun Exp $     */
/*     $NetBSD: ip_icmp.c,v 1.19 1996/02/13 23:42:22 christos Exp $    */

/*
@@ -594,8 +594,11 @@
                           if (opt == IPOPT_NOP)
                                   len = 1;
                           else {
+                                   if (cnt < IPOPT_OLEN + sizeof(*cp))
+                                           break;
                                   len = cp[IPOPT_OLEN];
-                                   if (len <= 0 || len > cnt)
+                                   if (len < IPOPT_OLEN + sizeof(*cp) ||
+                                       len > cnt)
                                           break;
                           }
                           /*
Index: sys/netinet/ip_input.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- sys/netinet/ip_input.c      2000/05/10 03:22:39     1.55
+++ sys/netinet/ip_input.c      2000/05/15 11:07:33     1.56
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_input.c,v 1.55 2000/05/10 03:22:39 jason Exp $     */
+/*     $OpenBSD: ip_input.c,v 1.56 2000/05/15 11:07:33 itojun Exp $    */
/*     $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $   */

/*
@@ -866,8 +866,12 @@
               if (opt == IPOPT_NOP)
                       optlen = 1;
               else {
+                       if (cnt < IPOPT_OLEN + sizeof(*cp)) {
+                               code = &cp[IPOPT_OLEN] - (u_char *)ip;
+                               goto bad;
+                       }
                       optlen = cp[IPOPT_OLEN];
-                       if (optlen <= 0 || optlen > cnt) {
+                       if (optlen < IPOPT_OLEN + sizeof(*cp) || optlen > cnt) {
                               code = &cp[IPOPT_OLEN] - (u_char *)ip;
                               goto bad;
                       }
@@ -955,6 +959,10 @@
                       break;

               case IPOPT_RR:
+                       if (optlen < IPOPT_OFFSET + sizeof(*cp)) {
+                               code = &cp[IPOPT_OLEN] - (u_char *)ip;
+                               goto bad;
+                       }
                       if ((off = cp[IPOPT_OFFSET]) < IPOPT_MINOFF) {
                               code = &cp[IPOPT_OFFSET] - (u_char *)ip;
                               goto bad;
Index: sys/netinet/ip_output.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -r1.68 -r1.69
--- sys/netinet/ip_output.c     2000/05/04 20:15:38     1.68
+++ sys/netinet/ip_output.c     2000/05/15 11:07:33     1.69
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ip_output.c,v 1.68 2000/05/04 20:15:38 niklas Exp $   */
+/*     $OpenBSD: ip_output.c,v 1.69 2000/05/15 11:07:33 itojun Exp $   */
/*     $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $  */

/*
@@ -896,8 +896,16 @@
                       *dp++ = IPOPT_NOP;
                       optlen = 1;
                       continue;
-               } else
-                       optlen = cp[IPOPT_OLEN];
+               }
+#ifdef DIAGNOSTIC
+               if (cnt < IPOPT_OLEN + sizeof(*cp))
+                       panic("malformed IPv4 option passed to ip_optcopy");
+#endif
+               optlen = cp[IPOPT_OLEN];
+#ifdef DIAGNOSTIC
+               if (optlen < IPOPT_OLEN + sizeof(*cp) || optlen > cnt)
+                       panic("malformed IPv4 option passed to ip_optcopy");
+#endif
               /* bogus lengths should have been caught by ip_dooptions */
               if (optlen > cnt)
                       optlen = cnt;
@@ -1281,8 +1289,10 @@
               if (opt == IPOPT_NOP)
                       optlen = 1;
               else {
+                       if (cnt < IPOPT_OLEN + sizeof(*cp))
+                               goto bad;
                       optlen = cp[IPOPT_OLEN];
-                       if (optlen <= IPOPT_OLEN || optlen > cnt)
+                       if (optlen < IPOPT_OLEN  + sizeof(*cp) || optlen > cnt)
                               goto bad;
               }
               switch (opt) {