MFC: Locks SPTREE when setting some SP entries to state DEAD.

This can prevent kernel panics when updating SPs while there is
some traffic for them.

Obtained from:	NETASQ
This commit is contained in:
VANHULLEBUS Yvan 2010-05-17 15:31:24 +00:00
parent 66a7924d0b
commit 0b4ae73d99

View File

@ -1882,7 +1882,9 @@ key_spdadd(so, m, mhp)
newsp = key_getsp(&spidx);
if (mhp->msg->sadb_msg_type == SADB_X_SPDUPDATE) {
if (newsp) {
SPTREE_LOCK();
newsp->state = IPSEC_SPSTATE_DEAD;
SPTREE_UNLOCK();
KEY_FREESP(&newsp);
}
} else {
@ -2127,7 +2129,9 @@ key_spddelete(so, m, mhp)
/* save policy id to buffer to be returned. */
xpl0->sadb_x_policy_id = sp->id;
SPTREE_LOCK();
sp->state = IPSEC_SPSTATE_DEAD;
SPTREE_UNLOCK();
KEY_FREESP(&sp);
{
@ -2194,7 +2198,9 @@ key_spddelete2(so, m, mhp)
return key_senderror(so, m, EINVAL);
}
SPTREE_LOCK();
sp->state = IPSEC_SPSTATE_DEAD;
SPTREE_UNLOCK();
KEY_FREESP(&sp);
{