Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144464785
D14763.id40506.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D14763.id40506.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D14763: Set the proper vnet in IPSec callback functions.
Attached
Detach File
Event Timeline
Log In to Comment