diff options
author | glebius <glebius@FreeBSD.org> | 2013-11-05 16:54:25 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2013-11-05 16:54:25 +0000 |
commit | c5f4e2274d5c7eae31f3489830ffba647888d05a (patch) | |
tree | f4b107cb9d72492513bb595987336b532d98c763 /sys/netpfil | |
parent | 6ac4b0cbe35c8d3fedfb7b2c514fe1b496b302bd (diff) | |
download | FreeBSD-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.c | 4 |
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, |