OpenSolaris

Printable Version Enter a New Search
Bug ID 6529942
Synopsis Flushing IPv6 filter rules causes panic
State 10-Fix Delivered (Fix available in build)
Category:Subcategory network:ipfilter
Keywords opensolaris
Responsible Engineer Evan Xu
Reported Against snv_57
Duplicate Of
Introduced In solaris_10
Commit to Fix snv_77
Fixed In snv_77
Release Fixed solaris_nevada(snv_77) , solaris_10u7(s10u7_06) (Bug ID:2164716)
Related Bugs 4948159 , 6801617
Submit Date 1-March-2007
Last Update Date 23-January-2009
Description
Category
   network
Sub-Category
   ipfilter
Description
   Flushing the IPv6 ruleset appears to cause a panic.  If the ruleset is currently empty, the system will survive an "ipf -6F a" command.  However, flushing an active ruleset will crash the system.
Frequency
   Always
Regression
   No
Steps to Reproduce
   At a root prompt, given the example IPv4 and IPv6 configurations:
ipf -6f /etc/ipf/ipf6.test
ipf -6F a
Expected Result
   IPv6 ruleset is flushed and reloaded.
Actual Result
   System panics.  A vmcore is successfully dropped.
Error Message(s)
   # adb -w ./unix.4 ./vmcore.4 
physmem 3f78e
$C
ca047b98 vpanic(fea8ed10, f988c6d0, f988c6b4, d50)
ca047bb0 assfail+0x5a(f988c6d0, f988c6b4, d50)
ca047be8 frflushlist+0xf3(1, 0, ca047c28, c8e13bb0, c8e13000)
ca047c2c frflush+0xff(0, 6, c000, c8e13000)
ca047e30 iplioctl+0x3b9(2940000, c004725a, 8047dd8, 100003, c9aa12d8, ca047f70)
ca047e5c cdev_ioctl+0x2e(2940000, c004725a, 8047dd8, 100003, c9aa12d8, ca047f70
)
ca047e84 spec_ioctl+0x65(c7cf2ac0, c004725a, 8047dd8, 100003, c9aa12d8, ca047f70
)
ca047ec4 fop_ioctl+0x27(c7cf2ac0, c004725a, 8047dd8, 100003, c9aa12d8, ca047f70
)
ca047f7c ioctl+0x151()
ca047fa4 sys_sysenter+0x1a0()
Test Case
   
Workaround
   The first ruleset load appears to succeed... so long as you get the ruleset right "the first time", the system appears stable.  Ruleset reloads can be done via reboot.
Submitter wants to work on bug
   No
Additional configuration information
   BFU'd opensol-20070219 i86pc, with on-board 100bT ethernet (iprb) connection, running with IPv4 and native IPv6 (not tunneled).
Problem was originally observed while running X, but is reproducible at a command-line login.
IPv4 IPF ruleset (/etc/ipf/ipf.conf, "X" == local IPv4 address, "Y" == friendly server IPv4 address)
block in quick on iprb0 from localhost to any
block in quick on iprb0 from pool/100 to any
block in quick on iprb0 from pool/101 to any
block in quick on iprb0 from pool/102 to any
block in quick on iprb0 from <X>/32 to any
pass in quick from localhost to localhost
block in log quick all with short
block in log quick all with frag
block in log on iprb0 all  head 100
 block in log proto udp all  head 125 group 100
  block in proto udp from any to pool/200 group 125
  pass in proto udp from any to any port = 123 keep state group 125 # NTP
  pass in proto udp from any to any port = 500 keep state group 125 # IKE
  pass in proto udp from any to any port = 4500 keep state group 125 # IKE
 block in log proto tcp all head 150 group 100
  pass in proto tcp from any to any port = 22 keep state group 150 # ssh
  pass in proto tcp from any to any port = 113 keep state group 150 # Identd
  pass in proto tcp from any to any port = 123 keep state group 150 # NTP
 pass in log proto icmp all group 100
 pass in log first proto ah from any to any keep state
pass out all head 200
 pass out proto udp all keep state group 200
 pass out proto tcp all keep state group 200
 pass out log proto icmp all group 200
pass in from any to 224.0.0.0/4
pass in proto tcp from <Y>/32 to any keep state
IPv6 ruleset (/etc/ipf/ipf6.test):
block in quick on iprb0 from localhost to any
pass in quick from localhost to localhost
block in log quick all with short
block in log quick all with frag
pass in log first proto ipv6-icmp from any to any
pass in proto ipv6 from any to any
pass in proto ipv6-route from any to any
pass in proto ipv6-frag from any to any
pass in proto ipv6-nonxt from any to any
pass in proto ipv6-opts from any to any
pass in proto icmp from any to any icmp-type 9
block in log on iprb0 all head 100
 block in log proto udp all head 125 group 100
 block in log proto tcp all head 150 group 100
 pass in log proto ipv6-icmp all group 100
pass out all head 200
 pass out proto udp all keep state group 200
 pass out proto tcp all keep state group 200
 pass out log proto ipv6-icmp all group 200
IP Pools configuration (/etc/ipf/ippool.conf):
table role = ipf type = tree number = 100
        { 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 };
table role = ipf type = tree number = 101
        { 169.254.0.0/16 };
table role = ipf type = tree number = 102
        { 127.0.0.0/8 };
Work Around
N/A
Comments
N/A