aboutsummaryrefslogtreecommitdiff
path: root/sys/netpfil
diff options
context:
space:
mode:
authorKristof Provost <kp@FreeBSD.org>2017-03-12 05:42:57 +0000
committerKristof Provost <kp@FreeBSD.org>2017-03-12 05:42:57 +0000
commit2a57d24bd1c9693c6316d40101b9cac0e33f6f58 (patch)
tree5895ba1ae80be99ddb788d8c157b289d7f6c9677 /sys/netpfil
parentacdb1504ffd64f7138cf0f8cd5fdd4e4653f8f14 (diff)
downloadsrc-2a57d24bd1c9693c6316d40101b9cac0e33f6f58.tar.gz
src-2a57d24bd1c9693c6316d40101b9cac0e33f6f58.zip
pf: Fix incorrect rw_sleep() in pf_unload()
When we unload we don't hold the pf_rules_lock, so we cannot call rw_sleep() with it, because it would release a lock we do not hold. There's no need for the lock either, so we can just tsleep(). While here also make the same change in pf_purge_thread(), because it explicitly takes the lock before rw_sleep() and then immediately releases it afterwards.
Notes
Notes: svn path=/head/; revision=315136
Diffstat (limited to 'sys/netpfil')
-rw-r--r--sys/netpfil/pf/pf.c4
-rw-r--r--sys/netpfil/pf/pf_ioctl.c2
2 files changed, 2 insertions, 4 deletions
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index dd3b60795f3f..ad0efe156536 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -1429,9 +1429,7 @@ pf_purge_thread(void *unused __unused)
u_int idx = 0;
for (;;) {
- PF_RULES_RLOCK();
- rw_sleep(pf_purge_thread, &pf_rules_lock, 0, "pftm", hz / 10);
- PF_RULES_RUNLOCK();
+ tsleep(pf_purge_thread, 0, "pftm", hz / 10);
VNET_LIST_RLOCK();
VNET_FOREACH(vnet_iter) {
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index 73fcb4523b00..19467736cce5 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -3791,7 +3791,7 @@ pf_unload(void)
pf_end_threads = 1;
while (pf_end_threads < 2) {
wakeup_one(pf_purge_thread);
- rw_sleep(pf_purge_thread, &pf_rules_lock, 0, "pftmo", 0);
+ tsleep(pf_purge_thread, 0, "pftmo", 0);
}
if (pf_dev != NULL)