Apply by doing:
       cd /usr/src
       patch -p0 < 001_bind.patch

And then rebuild and install bind:
       cd usr.sbin/bind
       make -f Makefile.bsd-wrapper obj
       make -f Makefile.bsd-wrapper depend
       make -f Makefile.bsd-wrapper
       make -f Makefile.bsd-wrapper install

Index: usr.sbin/bind/bin/named/query.c
===================================================================
RCS file: /cvs/src/usr.sbin/bind/bin/named/query.c,v
retrieving revision 1.8
diff -u -p -r1.8 query.c
--- usr.sbin/bind/bin/named/query.c     9 Dec 2007 13:39:42 -0000       1.8
+++ usr.sbin/bind/bin/named/query.c     29 Nov 2011 13:39:58 -0000
@@ -1239,11 +1239,9 @@ query_addadditional(void *arg, dns_name_
                       goto addname;
               if (result == DNS_R_NCACHENXRRSET) {
                       dns_rdataset_disassociate(rdataset);
-                       /*
-                        * Negative cache entries don't have sigrdatasets.
-                        */
-                       INSIST(sigrdataset == NULL ||
-                              ! dns_rdataset_isassociated(sigrdataset));
+                       if (sigrdataset != NULL &&
+                           dns_rdataset_isassociated(sigrdataset))
+                               dns_rdataset_disassociate(sigrdataset);
               }
               if (result == ISC_R_SUCCESS) {
                       mname = NULL;
@@ -1284,8 +1282,9 @@ query_addadditional(void *arg, dns_name_
                       goto addname;
               if (result == DNS_R_NCACHENXRRSET) {
                       dns_rdataset_disassociate(rdataset);
-                       INSIST(sigrdataset == NULL ||
-                              ! dns_rdataset_isassociated(sigrdataset));
+                       if (sigrdataset != NULL &&
+                           dns_rdataset_isassociated(sigrdataset))
+                               dns_rdataset_disassociate(sigrdataset);
               }
               if (result == ISC_R_SUCCESS) {
                       mname = NULL;
@@ -1733,10 +1732,8 @@ query_addadditional2(void *arg, dns_name
               goto setcache;
       if (result == DNS_R_NCACHENXRRSET) {
               dns_rdataset_disassociate(rdataset);
-               /*
-                * Negative cache entries don't have sigrdatasets.
-                */
-               INSIST(! dns_rdataset_isassociated(sigrdataset));
+               if (dns_rdataset_isassociated(sigrdataset))
+                       dns_rdataset_disassociate(sigrdataset);
       }
       if (result == ISC_R_SUCCESS) {
               /* Remember the result as a cache */
Index: usr.sbin/bind/lib/dns/rbtdb.c
===================================================================
RCS file: /cvs/src/usr.sbin/bind/lib/dns/rbtdb.c,v
retrieving revision 1.6
diff -u -p -r1.6 rbtdb.c
--- usr.sbin/bind/lib/dns/rbtdb.c       9 Dec 2007 13:39:43 -0000       1.6
+++ usr.sbin/bind/lib/dns/rbtdb.c       29 Nov 2011 13:39:58 -0000
@@ -244,6 +244,7 @@ typedef struct rdatasetheader {
#define RDATASET_ATTR_IGNORE           0x0004
#define RDATASET_ATTR_RETAIN           0x0008
#define RDATASET_ATTR_NXDOMAIN         0x0010
+#define RDATASET_ATTR_NEGATIVE          0x0100

typedef struct acache_cbarg {
       dns_rdatasetadditional_t        type;
@@ -278,6 +279,8 @@ struct acachectl {
       (((header)->attributes & RDATASET_ATTR_RETAIN) != 0)
#define NXDOMAIN(header) \
       (((header)->attributes & RDATASET_ATTR_NXDOMAIN) != 0)
+#define NEGATIVE(header) \
+        (((header)->attributes & RDATASET_ATTR_NEGATIVE) != 0)

#define DEFAULT_NODE_LOCK_COUNT                7       /*%< Should be prime. */
#define DEFAULT_CACHE_NODE_LOCK_COUNT  1009    /*%< Should be prime. */
@@ -3648,7 +3651,7 @@ cache_find(dns_db_t *db, dns_name_t *nam
           result == DNS_R_NCACHENXRRSET) {
               bind_rdataset(search.rbtdb, node, found, search.now,
                             rdataset);
-               if (foundsig != NULL)
+               if (!NEGATIVE(found) && foundsig != NULL)
                       bind_rdataset(search.rbtdb, node, foundsig, search.now,
                                     sigrdataset);
       }
@@ -4234,7 +4237,7 @@ cache_findrdataset(dns_db_t *db, dns_dbn
       }
       if (found != NULL) {
               bind_rdataset(rbtdb, rbtnode, found, now, rdataset);
-               if (foundsig != NULL)
+               if (!NEGATIVE(found) && foundsig != NULL)
                       bind_rdataset(rbtdb, rbtnode, foundsig, now,
                                     sigrdataset);
       }