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