summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ipfilter/netinet
diff options
context:
space:
mode:
authoroleg <oleg@FreeBSD.org>2006-10-05 09:48:25 +0000
committeroleg <oleg@FreeBSD.org>2006-10-05 09:48:25 +0000
commit60fe2e7137c75004ef1d01ee01807213e046b38a (patch)
tree6c591b9ea5bd06cedc100b5a5c45332188540ff1 /sys/contrib/ipfilter/netinet
parent84361990fcb86bc1f9b4cbbca14bc88162f7bec2 (diff)
downloadFreeBSD-src-60fe2e7137c75004ef1d01ee01807213e046b38a.zip
FreeBSD-src-60fe2e7137c75004ef1d01ee01807213e046b38a.tar.gz
Workaround bad locking design:
do not try to lock/unlock destroyed/non-existsing mutex. PR: kern/103569 Reviewed by: guido Approved by: glebius (mentor) Silence from: darrenr MFC: 2 week
Diffstat (limited to 'sys/contrib/ipfilter/netinet')
-rw-r--r--sys/contrib/ipfilter/netinet/ip_fil_freebsd.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
index d278781..64421e0 100644
--- a/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
+++ b/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
@@ -481,7 +481,8 @@ int mode;
}
SPL_NET(s);
- READ_ENTER(&ipf_global);
+ if (fr_running > 0)
+ READ_ENTER(&ipf_global);
error = fr_ioctlswitch(unit, data, cmd, mode);
if (error != -1) {
@@ -514,7 +515,10 @@ int mode;
else
(void) ipldetach();
} else {
- error = ipldetach();
+ if (fr_running <= 0)
+ error = 0;
+ else
+ error = ipldetach();
if (error == 0)
fr_running = -1;
}
@@ -627,7 +631,9 @@ int mode;
break;
}
- RWLOCK_EXIT(&ipf_global);
+ if (fr_running > 0)
+ if (mtx_owned(&(&ipf_global)->ipf_lk))
+ RWLOCK_EXIT(&ipf_global);
SPL_X(s);
return error;
OpenPOWER on IntegriCloud