]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet6/ipcomp_output.c
xnu-792.24.17.tar.gz
[apple/xnu.git] / bsd / netinet6 / ipcomp_output.c
index a8a839b937a86b8b79d4a937b2e29926ab70d714..7a8d39b1d3d784d3af58d33ab6332e23c9a49fea 100644 (file)
@@ -49,9 +49,9 @@
 
 #include <net/if.h>
 #include <net/route.h>
-#include <net/netisr.h>
 #include <net/zlib.h>
 #include <kern/cpu_number.h>
+#include <kern/locks.h>
 
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 
 #include <net/net_osdep.h>
 
-static int ipcomp_output __P((struct mbuf *, u_char *, struct mbuf *,
-       struct ipsecrequest *, int));
+extern lck_mtx_t  *sadb_mutex;
+
+static int ipcomp_output(struct mbuf *, u_char *, struct mbuf *,
+       struct ipsecrequest *, int);
 
 /*
  * Modify the packet so that the payload is compressed.
@@ -204,7 +206,9 @@ ipcomp_output(m, nexthdrp, md, isr, af)
        mprev->m_next = md;
 
        /* compress data part */
+       lck_mtx_unlock(sadb_mutex);
        if ((*algo->compress)(m, md, &plen) || mprev->m_next == NULL) {
+               lck_mtx_lock(sadb_mutex);
                ipseclog((LOG_ERR, "packet compression failure\n"));
                m = NULL;
                m_freem(md0);
@@ -213,6 +217,7 @@ ipcomp_output(m, nexthdrp, md, isr, af)
                error = EINVAL;
                goto fail;
        }
+       lck_mtx_lock(sadb_mutex);
        stat->out_comphist[sav->alg_enc]++;
        md = mprev->m_next;