Page MenuHomeFreeBSD

D14763.id40506.diff
No OneTemporary

D14763.id40506.diff

Index: head/sys/netipsec/xform.h
===================================================================
--- head/sys/netipsec/xform.h
+++ head/sys/netipsec/xform.h
@@ -76,6 +76,7 @@
int protoff; /* current protocol offset */
int skip; /* data offset */
uint8_t nxt; /* next protocol, e.g. IPV4 */
+ struct vnet *vnet;
};
#define XF_IP4 1 /* unused */
Index: head/sys/netipsec/xform_ah.c
===================================================================
--- head/sys/netipsec/xform_ah.c
+++ head/sys/netipsec/xform_ah.c
@@ -667,6 +667,7 @@
xd->protoff = protoff;
xd->skip = skip;
xd->cryptoid = cryptoid;
+ xd->vnet = curvnet;
return (crypto_dispatch(crp));
bad:
m_freem(m);
@@ -693,6 +694,7 @@
m = (struct mbuf *) crp->crp_buf;
xd = (struct xform_data *) crp->crp_opaque;
+ CURVNET_SET(xd->vnet);
sav = xd->sav;
skip = xd->skip;
nxt = xd->nxt;
@@ -710,6 +712,7 @@
if (ipsec_updateid(sav, &crp->crp_sid, &cryptoid) != 0)
crypto_freesession(cryptoid);
xd->cryptoid = crp->crp_sid;
+ CURVNET_RESTORE();
return (crypto_dispatch(crp));
}
AHSTAT_INC(ahs_noxform);
@@ -805,8 +808,10 @@
panic("%s: Unexpected address family: %d saidx=%p", __func__,
saidx->dst.sa.sa_family, saidx);
}
+ CURVNET_RESTORE();
return error;
bad:
+ CURVNET_RESTORE();
if (sav)
key_freesav(&sav);
if (m != NULL)
@@ -1040,6 +1045,7 @@
xd->skip = skip;
xd->idx = idx;
xd->cryptoid = cryptoid;
+ xd->vnet = curvnet;
return crypto_dispatch(crp);
bad:
@@ -1067,6 +1073,7 @@
m = (struct mbuf *) crp->crp_buf;
xd = (struct xform_data *) crp->crp_opaque;
+ CURVNET_SET(xd->vnet);
sp = xd->sp;
sav = xd->sav;
skip = xd->skip;
@@ -1081,6 +1088,7 @@
if (ipsec_updateid(sav, &crp->crp_sid, &cryptoid) != 0)
crypto_freesession(cryptoid);
xd->cryptoid = crp->crp_sid;
+ CURVNET_RESTORE();
return (crypto_dispatch(crp));
}
AHSTAT_INC(ahs_noxform);
@@ -1122,8 +1130,10 @@
/* NB: m is reclaimed by ipsec_process_done. */
error = ipsec_process_done(m, sp, sav, idx);
+ CURVNET_RESTORE();
return (error);
bad:
+ CURVNET_RESTORE();
free(xd, M_XDATA);
crypto_freereq(crp);
key_freesav(&sav);
Index: head/sys/netipsec/xform_esp.c
===================================================================
--- head/sys/netipsec/xform_esp.c
+++ head/sys/netipsec/xform_esp.c
@@ -397,6 +397,7 @@
xd->protoff = protoff;
xd->skip = skip;
xd->cryptoid = cryptoid;
+ xd->vnet = curvnet;
/* Decryption descriptor */
IPSEC_ASSERT(crde != NULL, ("null esp crypto descriptor"));
@@ -455,6 +456,7 @@
m = (struct mbuf *) crp->crp_buf;
xd = (struct xform_data *) crp->crp_opaque;
+ CURVNET_SET(xd->vnet);
sav = xd->sav;
skip = xd->skip;
protoff = xd->protoff;
@@ -469,6 +471,7 @@
if (ipsec_updateid(sav, &crp->crp_sid, &cryptoid) != 0)
crypto_freesession(cryptoid);
xd->cryptoid = crp->crp_sid;
+ CURVNET_RESTORE();
return (crypto_dispatch(crp));
}
ESPSTAT_INC(esps_noxform);
@@ -603,8 +606,10 @@
panic("%s: Unexpected address family: %d saidx=%p", __func__,
saidx->dst.sa.sa_family, saidx);
}
+ CURVNET_RESTORE();
return error;
bad:
+ CURVNET_RESTORE();
if (sav != NULL)
key_freesav(&sav);
if (m != NULL)
@@ -837,6 +842,7 @@
xd->sav = sav;
xd->idx = idx;
xd->cryptoid = cryptoid;
+ xd->vnet = curvnet;
/* Crypto operation descriptor. */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length. */
@@ -882,6 +888,7 @@
int error;
xd = (struct xform_data *) crp->crp_opaque;
+ CURVNET_SET(xd->vnet);
m = (struct mbuf *) crp->crp_buf;
sp = xd->sp;
sav = xd->sav;
@@ -895,6 +902,7 @@
if (ipsec_updateid(sav, &crp->crp_sid, &cryptoid) != 0)
crypto_freesession(cryptoid);
xd->cryptoid = crp->crp_sid;
+ CURVNET_RESTORE();
return (crypto_dispatch(crp));
}
ESPSTAT_INC(esps_noxform);
@@ -940,8 +948,10 @@
/* NB: m is reclaimed by ipsec_process_done. */
error = ipsec_process_done(m, sp, sav, idx);
+ CURVNET_RESTORE();
return (error);
bad:
+ CURVNET_RESTORE();
free(xd, M_XDATA);
crypto_freereq(crp);
key_freesav(&sav);
Index: head/sys/netipsec/xform_ipcomp.c
===================================================================
--- head/sys/netipsec/xform_ipcomp.c
+++ head/sys/netipsec/xform_ipcomp.c
@@ -255,6 +255,7 @@
xd->sav = sav;
xd->protoff = protoff;
xd->skip = skip;
+ xd->vnet = curvnet;
SECASVAR_LOCK(sav);
crp->crp_sid = xd->cryptoid = sav->tdb_cryptoid;
@@ -286,6 +287,7 @@
m = (struct mbuf *) crp->crp_buf;
xd = (struct xform_data *) crp->crp_opaque;
+ CURVNET_SET(xd->vnet);
sav = xd->sav;
skip = xd->skip;
protoff = xd->protoff;
@@ -302,6 +304,7 @@
if (ipsec_updateid(sav, &crp->crp_sid, &cryptoid) != 0)
crypto_freesession(cryptoid);
xd->cryptoid = crp->crp_sid;
+ CURVNET_RESTORE();
return (crypto_dispatch(crp));
}
IPCOMPSTAT_INC(ipcomps_noxform);
@@ -366,8 +369,10 @@
panic("%s: Unexpected address family: %d saidx=%p", __func__,
saidx->dst.sa.sa_family, saidx);
}
+ CURVNET_RESTORE();
return error;
bad:
+ CURVNET_RESTORE();
if (sav != NULL)
key_freesav(&sav);
if (m != NULL)
@@ -493,6 +498,7 @@
xd->idx = idx;
xd->skip = skip;
xd->protoff = protoff;
+ xd->vnet = curvnet;
/* Crypto operation descriptor */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length */
@@ -531,6 +537,7 @@
m = (struct mbuf *) crp->crp_buf;
xd = (struct xform_data *) crp->crp_opaque;
+ CURVNET_SET(xd->vnet);
idx = xd->idx;
sp = xd->sp;
sav = xd->sav;
@@ -545,6 +552,7 @@
if (ipsec_updateid(sav, &crp->crp_sid, &cryptoid) != 0)
crypto_freesession(cryptoid);
xd->cryptoid = crp->crp_sid;
+ CURVNET_RESTORE();
return (crypto_dispatch(crp));
}
IPCOMPSTAT_INC(ipcomps_noxform);
@@ -640,10 +648,12 @@
/* NB: m is reclaimed by ipsec_process_done. */
error = ipsec_process_done(m, sp, sav, idx);
+ CURVNET_RESTORE();
return (error);
bad:
if (m)
m_freem(m);
+ CURVNET_RESTORE();
free(xd, M_XDATA);
crypto_freereq(crp);
key_freesav(&sav);

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 2:16 PM (7 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28587743
Default Alt Text
D14763.id40506.diff (5 KB)

Event Timeline