Apply by doing:
       cd /usr/src
       patch -p0 < 003_bridge.patch

And then rebuild your kernel.

Index: sys/net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- sys/net/if_bridge.c 2000/04/10 13:34:54     1.29
+++ sys/net/if_bridge.c 2000/05/25 00:30:27     1.30
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_bridge.c,v 1.29 2000/04/10 13:34:54 jason Exp $    */
+/*     $OpenBSD: if_bridge.c,v 1.30 2000/05/25 00:30:27 jason Exp $    */

/*
 * Copyright (c) 1999, 2000 Jason L. Wright ([email protected])
@@ -1093,24 +1093,21 @@
       /*
        * Unicast, make sure it's not for us.
        */
-       ifl = LIST_FIRST(&sc->sc_iflist);
-       while (ifl != NULL) {
-               if (ifl->ifp->if_type == IFT_ETHER) {
-                       ac = (struct arpcom *)ifl->ifp;
-                       if (bcmp(ac->ac_enaddr, eh->ether_dhost,
-                           ETHER_ADDR_LEN) == 0) {
+       for (ifl = LIST_FIRST(&sc->sc_iflist);ifl; ifl = LIST_NEXT(ifl,next)) {
+               if (ifl->ifp->if_type != IFT_ETHER)
+                       continue;
+               ac = (struct arpcom *)ifl->ifp;
+               if (bcmp(ac->ac_enaddr, eh->ether_dhost, ETHER_ADDR_LEN) == 0) {
+                       if (ifl->bif_flags & IFBIF_LEARNING)
                               bridge_rtupdate(sc,
-                                   (struct ether_addr *)&eh->ether_dhost[0],
+                                   (struct ether_addr *)&eh->ether_dhost,
                                   ifp, 0, IFBAF_DYNAMIC);
-                               return (m);
-                       }
-                       if (bcmp(ac->ac_enaddr, eh->ether_shost,
-                           ETHER_ADDR_LEN) == 0) {
-                               m_freem(m);
-                               return (NULL);
-                       }
+                       return (m);
               }
-               ifl = LIST_NEXT(ifl, next);
+               if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0) {
+                       m_freem(m);
+                       return (NULL);
+               }
       }
       M_PREPEND(m, sizeof(struct ether_header), M_DONTWAIT);
       if (m == NULL)
@@ -1166,9 +1163,8 @@

               if (SIMPLEQ_FIRST(&p->bif_brlout) &&
                   bridge_filterrule(SIMPLEQ_FIRST(&p->bif_brlout), eh) ==
-                   BRL_ACTION_BLOCK) {
+                   BRL_ACTION_BLOCK)
                       continue;
-               }

               /* If last one, reuse the passed-in mbuf */
               if (LIST_NEXT(p, next) == NULL) {