summaryrefslogtreecommitdiffstats
path: root/sys/netipsec/key.c
diff options
context:
space:
mode:
authorvanhu <vanhu@FreeBSD.org>2009-05-27 09:44:14 +0000
committervanhu <vanhu@FreeBSD.org>2009-05-27 09:44:14 +0000
commit48cef84e5fd897fd091510cbaa9c81f73e2d7fa6 (patch)
treeec6461dd8524d6357e28ba0605836a82d7a962cf /sys/netipsec/key.c
parent5373be118dcfe5ac88cf92412bc89027dc354def (diff)
downloadFreeBSD-src-48cef84e5fd897fd091510cbaa9c81f73e2d7fa6.zip
FreeBSD-src-48cef84e5fd897fd091510cbaa9c81f73e2d7fa6.tar.gz
Lock SPTREE before parsing it in key_spddump()
Approved by: gnn(mentor) Obtained from: NETASQ MFC after: 2 weeks
Diffstat (limited to 'sys/netipsec/key.c')
-rw-r--r--sys/netipsec/key.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c
index 83377e5..a38bb8d 100644
--- a/sys/netipsec/key.c
+++ b/sys/netipsec/key.c
@@ -2396,14 +2396,17 @@ key_spddump(so, m, mhp)
/* search SPD entry and get buffer size. */
cnt = 0;
+ SPTREE_LOCK();
for (dir = 0; dir < IPSEC_DIR_MAX; dir++) {
LIST_FOREACH(sp, &V_sptree[dir], chain) {
cnt++;
}
}
- if (cnt == 0)
+ if (cnt == 0) {
+ SPTREE_UNLOCK();
return key_senderror(so, m, ENOENT);
+ }
for (dir = 0; dir < IPSEC_DIR_MAX; dir++) {
LIST_FOREACH(sp, &V_sptree[dir], chain) {
@@ -2416,6 +2419,7 @@ key_spddump(so, m, mhp)
}
}
+ SPTREE_UNLOCK();
m_freem(m);
return 0;
}
OpenPOWER on IntegriCloud