misc/168200: pf crashes when receiving packets from an address in a
table
Hugo Silva
hugo at barafranca.com
Mon May 21 15:10:09 UTC 2012
>Number: 168200
>Category: misc
>Synopsis: pf crashes when receiving packets from an address in a table
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon May 21 15:10:02 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator: Hugo Silva
>Release: 9.0-RELEASE
>Organization:
>Environment:
FreeBSD xxx.ext1.xxx.local 9.0-RELEASE FreeBSD 9.0-RELEASE #1: Wed May 2 11:55:06 UTC 2012 root at xxx.ext1.xxx.local:/usr/obj/usr/src/sys/XXX amd64
>Description:
pf.conf snippet:
table <blacklist> persist
block in quick on $ext_if inet from <blacklist>
When connecting from a host that has been added to the table (and only from such a host), the kernel will crash.
Please note that this is a HVM+PV Xen installation, perhaps it only occurs when running virtualized (seems to obvious to have been missed otherwise)
>How-To-Repeat:
# pfctl -Tadd -tblacklist ${your_source_address}
No ALTQ support in kernel
ALTQ related functions disabled
1/1 addresses added.
At this point the machine is still alive:
# echo yay
yay
Now open a TCP connection:
laptop$ telnet ${fbsd_server} 6667
Trying ${fbsd_server}...
Meanwhile, at the hypervisor console.. [xm console ${domain_name}]
Fatal trap 12: page fault while in kernel mode
fault virtual address = 0x108
fault code = supervisor read data, page not present
instruction pointer = 0x20:0xffffffff8061bd38
stack pointer = 0x28:0xffffff80002c6510
frame pointer = 0x28:0xffffff80002c65d0
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 12 (irq28: xenpci0)
[ thread pid 12 tid 100025 ]
Stopped at uma_zalloc_arg+0x88: movq 0x8(%rbx),%rdx
db> bt
Tracing pid 12 tid 100025 td 0xfffffe0001281000
uma_zalloc_arg() at uma_zalloc_arg+0x88
pfr_update_stats() at pfr_update_stats+0x1c4
pf_test() at pf_test+0x8bf
pf_check_in() at pf_check_in+0x2b
pfil_run_hooks() at pfil_run_hooks+0x9e
ip_input() at ip_input+0x287
netisr_dispatch_src() at netisr_dispatch_src+0x20b
ether_demux() at ether_demux+0x14d
ether_nh_input() at ether_nh_input+0x1f4
netisr_dispatch_src() at netisr_dispatch_src+0x20b
xn_intr() at xn_intr+0x6b8
evtchn_interrupt() at evtchn_interrupt+0x2ed
intr_event_execute_handlers() at intr_event_execute_handlers+0xfb
ithread_loop() at ithread_loop+0xa6
fork_exit() at fork_exit+0x11f
fork_trampoline() at fork_trampoline+0xe
--- trap 0, rip = 0, rsp = 0xffffff80002c6d00, rbp = 0 ---
db>
>Fix:
Don't use pf tables :)
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list