summaryrefslogtreecommitdiffstats
path: root/sys/netpfil
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2013-11-05 16:54:25 +0000
committerglebius <glebius@FreeBSD.org>2013-11-05 16:54:25 +0000
commitc5f4e2274d5c7eae31f3489830ffba647888d05a (patch)
treef4b107cb9d72492513bb595987336b532d98c763 /sys/netpfil
parent6ac4b0cbe35c8d3fedfb7b2c514fe1b496b302bd (diff)
downloadFreeBSD-src-c5f4e2274d5c7eae31f3489830ffba647888d05a.zip
FreeBSD-src-c5f4e2274d5c7eae31f3489830ffba647888d05a.tar.gz
Fix fallout from r257223. Since pf_test_state_icmp() can call
pf_icmp_state_lookup() twice, we need to unlock previously found state. Reported & tested by: gavin
Diffstat (limited to 'sys/netpfil')
-rw-r--r--sys/netpfil/pf/pf.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index b0391c8..478b549 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -4607,6 +4607,8 @@ pf_test_state_icmp(struct pf_state **state, int direction, struct pfi_kif *kif,
if (ret >= 0) {
if (ret == PF_DROP && pd->af == AF_INET6 &&
icmp_dir == PF_OUT) {
+ if (*state)
+ PF_STATE_UNLOCK(*state);
ret = pf_icmp_state_lookup(&key, pd, state, m,
direction, kif, virtual_id, virtual_type,
icmp_dir, &iidx, multi);
@@ -5058,6 +5060,8 @@ pf_test_state_icmp(struct pf_state **state, int direction, struct pfi_kif *kif,
if (ret >= 0) {
if (ret == PF_DROP && pd->af == AF_INET6 &&
icmp_dir == PF_OUT) {
+ if (*state)
+ PF_STATE_UNLOCK(*state);
ret = pf_icmp_state_lookup(&key, pd,
state, m, direction, kif,
virtual_id, virtual_type,
OpenPOWER on IntegriCloud