Panic on boot with April 16 src (lengthy info attached)

Max Laier max at
Wed Apr 18 18:18:45 UTC 2007

On Wednesday 18 April 2007 17:49, Tillman Hodgson wrote:
> On Wed, Apr 18, 2007 at 08:54:00AM +0100, Robert Watson wrote:
> > Things get sticky deep in the firewall code because our firewalls
> > include credential-aware rules, which essentially "peek up the stack"
> > in order to decide what user is associated with a packet before
> > delivery to the connection is done.  The firewall rule lock is held
> > over this lookup and inspection of TCP-layer state.  In the out-bound
> > path, we pass down the TCP state reference (PCB pointer) and
> > guarantee the lock is already held. However, in the in-bound
> > direction, the firewall has to do the full lookup and lock
> > acquisition.  Which reverses the lock order, and can lead to
> > deadlocks.
> Thanks for the explanation :-)
> Previously you pointed out the ipfw man page which seems to be say the
> same thing (albeit with much less detail):
>   gid group
>     Matches all TCP or UDP packets sent by or received for a group.
>     A group may be specified by name or number.  This option should
>     be used only if debug.mpsafenet=0 to avoid possible deadlocks due
>     to layering violations in its implementation.
> Setting debug.mpsafenet=0 worked for me until the TCP timer change. Is
> the LOR situation always true for every inbound packet, or only with
> certain firewall rules in place?
> That question has me wondering if I can avoid the issue by avoiding
> certain PF features. My current ruleset is pretty simple. If I drop the
> variables definitions and comments, the whole thing is 13 lines:
> nat on $ext_if from $internal_net to any -> ($ext_if)
> rdr on $int_if proto tcp from $internal_net to any port ftp ->
> port 8021 block log all
> pass quick on lo0 all
> pass quick on $int_if proto ospf all
> pass in on $ext_if inet proto tcp from any to ($ext_if) port
> $tcp_services flags S/SA keep state pass in on $ext_if inet proto udp
> from any to ($ext_if) port $udp_services keep state pass in on $ext_if
> inet proto icmp all icmp-type $icmp_types keep state pass in on $ext_if
> inet proto tcp from any to $ext_if user proxy keep state pass in on
> $int_if from $metanetwork to any
> pass out on $int_if from any to $metanetwork
> pass out on $ext_if proto tcp all modulate state flags S/SA
> pass out on $ext_if proto { udp, icmp } all keep state

Running Current you can try to include "options PF_MPSAFE_UGID".  This is 
a hack that allows the use of user/group rules in a debug.mpsafe=1 
environment.  Unfortunately, I never got any feedback on this albeit 
throwing it after everybody with these symptoms.  Please report back!

/"\  Best regards,                      | mlaier at
\ /  Max Laier                          | ICQ #67774661
 X  | mlaier at EFnet
/ \  ASCII Ribbon Campaign              | Against HTML Mail and News
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url :

More information about the freebsd-current mailing list