PERFORCE change 38770 for review
Sam Leffler
sam at FreeBSD.org
Sun Sep 28 21:25:38 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=38770
Change 38770 by sam at sam_ebb on 2003/09/28 21:24:35
eliminate recursion on the SAHTREE lock
Affected files ...
.. //depot/projects/netperf/sys/netipsec/key.c#9 edit
Differences ...
==== //depot/projects/netperf/sys/netipsec/key.c#9 (text+ko) ====
@@ -2903,7 +2903,7 @@
u_int stateidx, state;
sav = NULL;
- SAHTREE_LOCK();
+ SAHTREE_LOCK_ASSERT();
/* search all status */
for (stateidx = 0;
stateidx < _ARRAYLEN(saorder_state_alive);
@@ -2924,7 +2924,6 @@
break;
}
}
- SAHTREE_UNLOCK();
return sav;
}
@@ -4688,7 +4687,10 @@
return key_senderror(so, m, ENOENT);
}
#else
- if ((sav = key_getsavbyspi(sah, sa0->sadb_sa_spi)) == NULL) {
+ SAHTREE_LOCK();
+ sav = key_getsavbyspi(sah, sa0->sadb_sa_spi);
+ SAHTREE_UNLOCK();
+ if (sav == NULL) {
ipseclog((LOG_DEBUG, "%s: no such a SA found (spi:%u)\n",
__func__, (u_int32_t)ntohl(sa0->sadb_sa_spi)));
return key_senderror(so, m, EINVAL);
@@ -4880,7 +4882,10 @@
/* create new SA entry. */
/* We can create new SA only if SPI is differenct. */
- if (key_getsavbyspi(newsah, sa0->sadb_sa_spi)) {
+ SAHTREE_LOCK();
+ newsav = key_getsavbyspi(newsah, sa0->sadb_sa_spi);
+ SAHTREE_UNLOCK();
+ if (newsav != NULL) {
ipseclog((LOG_DEBUG, "%s: SA already exists.\n", __func__));
return key_senderror(so, m, EEXIST);
}
More information about the p4-projects
mailing list