summaryrefslogtreecommitdiffstats
path: root/sys/netipsec/xform_ipcomp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netipsec/xform_ipcomp.c')
-rw-r--r--sys/netipsec/xform_ipcomp.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/netipsec/xform_ipcomp.c b/sys/netipsec/xform_ipcomp.c
index 1ad6c49..6885584 100644
--- a/sys/netipsec/xform_ipcomp.c
+++ b/sys/netipsec/xform_ipcomp.c
@@ -219,6 +219,8 @@ ipcomp_input_cb(struct cryptop *crp)
u_int8_t nproto;
caddr_t addr;
+ NET_LOCK_GIANT();
+
crd = crp->crp_desc;
tc = (struct tdb_crypto *) crp->crp_opaque;
@@ -249,7 +251,9 @@ ipcomp_input_cb(struct cryptop *crp)
if (crp->crp_etype == EAGAIN) {
KEY_FREESAV(&sav);
- return crypto_dispatch(crp);
+ error = crypto_dispatch(crp);
+ NET_UNLOCK_GIANT();
+ return error;
}
ipcompstat.ipcomps_noxform++;
@@ -302,6 +306,7 @@ ipcomp_input_cb(struct cryptop *crp)
IPSEC_COMMON_INPUT_CB(m, sav, skip, protoff, NULL);
KEY_FREESAV(&sav);
+ NET_UNLOCK_GIANT();
return error;
bad:
if (sav)
@@ -312,6 +317,7 @@ bad:
free(tc, M_XDATA);
if (crp)
crypto_freereq(crp);
+ NET_UNLOCK_GIANT();
return error;
}
@@ -493,6 +499,8 @@ ipcomp_output_cb(struct cryptop *crp)
struct mbuf *m;
int error, skip, rlen;
+ NET_LOCK_GIANT();
+
tc = (struct tdb_crypto *) crp->crp_opaque;
IPSEC_ASSERT(tc != NULL, ("null opaque data area!"));
m = (struct mbuf *) crp->crp_buf;
@@ -519,7 +527,9 @@ ipcomp_output_cb(struct cryptop *crp)
if (crp->crp_etype == EAGAIN) {
KEY_FREESAV(&sav);
IPSECREQUEST_UNLOCK(isr);
- return crypto_dispatch(crp);
+ error = crypto_dispatch(crp);
+ NET_UNLOCK_GIANT();
+ return error;
}
ipcompstat.ipcomps_noxform++;
DPRINTF(("%s: crypto error %d\n", __func__, crp->crp_etype));
@@ -572,7 +582,7 @@ ipcomp_output_cb(struct cryptop *crp)
error = ipsec_process_done(m, isr);
KEY_FREESAV(&sav);
IPSECREQUEST_UNLOCK(isr);
-
+ NET_UNLOCK_GIANT();
return error;
bad:
if (sav)
@@ -582,6 +592,7 @@ bad:
m_freem(m);
free(tc, M_XDATA);
crypto_freereq(crp);
+ NET_UNLOCK_GIANT();
return error;
}
OpenPOWER on IntegriCloud