diff options
author | vanhu <vanhu@FreeBSD.org> | 2009-05-27 09:44:14 +0000 |
---|---|---|
committer | vanhu <vanhu@FreeBSD.org> | 2009-05-27 09:44:14 +0000 |
commit | 48cef84e5fd897fd091510cbaa9c81f73e2d7fa6 (patch) | |
tree | ec6461dd8524d6357e28ba0605836a82d7a962cf /sys | |
parent | 5373be118dcfe5ac88cf92412bc89027dc354def (diff) | |
download | FreeBSD-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')
-rw-r--r-- | sys/netipsec/key.c | 6 |
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; } |