kern/103569: [ipfilter] ipf -D cause kernel panic
Oleg Bulyzhin
oleg at freebsd.org
Sat Sep 30 03:40:30 PDT 2006
The following reply was made to PR kern/103569; it has been noted by GNATS.
From: Oleg Bulyzhin <oleg at freebsd.org>
To: bug-followup at freebsd.org
Cc:
Subject: kern/103569: [ipfilter] ipf -D cause kernel panic
Date: Sat, 30 Sep 2006 14:39:16 +0400
--FL5UXtIhxfXey3p5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Could you please test attached patch?
--
Oleg.
--FL5UXtIhxfXey3p5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ipfilter_lock_fix.diff"
Index: sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
===================================================================
RCS file: /home/ncvs/src/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c,v
retrieving revision 1.4
diff -u -r1.4 ip_fil_freebsd.c
--- sys/contrib/ipfilter/netinet/ip_fil_freebsd.c 16 Aug 2006 12:06:35 -0000 1.4
+++ sys/contrib/ipfilter/netinet/ip_fil_freebsd.c 27 Sep 2006 17:46:39 -0000
@@ -481,7 +481,8 @@
}
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 @@
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 @@
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;
--FL5UXtIhxfXey3p5--
More information about the freebsd-bugs
mailing list