On 27.11.2022. 1:51, Alexandr Nedvedicky wrote:
> Hello,
>
> On Sat, Nov 26, 2022 at 08:33:28PM +0100, Hrvoje Popovski wrote:
> </snip>
>> I just need to say that with all pf, pfsync and with pf_purge diffs
>> after hackaton + this diff on tech@
>> https://www.mail-archive.com/[email protected]/msg72582.html
>> my production firewall seems stable and it wasn't without that diff
>
> this diff still waits for OK. it makes pfsync to use
> state mutex to safely dereference keys.
>
>>
>> I'm not sure if we have same diffs but even Josmar Pierri on bugs@
>> https://www.mail-archive.com/[email protected]/msg18994.html
>> who had panics quite regularly with that diff on tech@ seems to have
>> stable firewall now.
>>
>>
>>
>> r620-1# uvm_fault(0xffffffff82374288, 0x17, 0, 2) -> e
>> kernel: page fault trap, code=0
>> Stopped at pfsync_q_del+0x96: movq %rdx,0x8(%rax)
>> TID PID UID PRFLAGS PFLAGS CPU COMMAND
>> *192892 19920 0 0x14000 0x200 5K softnet
>> pfsync_q_del(fffffd82e8a4ce20) at pfsync_q_del+0x96
>> pf_remove_state(fffffd82e8a4ce20) at pf_remove_state+0x14b
>> pfsync_in_del_c(fffffd8006d843b8,c,79,0) at pfsync_in_del_c+0x6f
>> pfsync_input(ffff800022d60ad8,ffff800022d60ae4,f0,2) at pfsync_input+0x33c
>> ip_deliver(ffff800022d60ad8,ffff800022d60ae4,f0,2) at ip_deliver+0x113
>> ipintr() at ipintr+0x69
>> if_netisr(0) at if_netisr+0xea
>> taskq_thread(ffff800000030000) at taskq_thread+0x100
>> end trace frame: 0x0, count: 7
>> https://www.openbsd.org/ddb.html describes the minimum info required in
>> bug reports. Insufficient info makes it difficult to find and fix bugs.
>> ddb{5}>
>>
>
> those panics are causing me headaches. this got most-likely uncovered
> by diff which adds a mutex. The mutex makes pfsync stable enough
> so you can trigger unknown bugs.
Hi,
here's panic with WITNESS. Now I will try to trigger panic with that
mutex diff on tech@
r620-1# uvm_fault(0xffffffff824be2f8, 0x17, 0, 2) -> e
kernel: page fault trap, code=0
Stopped at pfsync_q_del+0x96: movq %rdx,0x8(%rax)
TID PID UID PRFLAGS PFLAGS CPU COMMAND
267891 77512 83 0x100012 0 2 ntpd
*250028 94877 0 0x14000 0x200 3K systq
35323 58401 0 0x14000 0x40000200 0 softclock
pfsync_q_del(fffffd82c6826da0) at pfsync_q_del+0x96
pfsync_delete_state(fffffd82c6826da0) at pfsync_delete_state+0x118
pf_remove_state(fffffd82c6826da0) at pf_remove_state+0x14b
pf_purge_expired_states(b3368) at pf_purge_expired_states+0x1b3
pf_purge(ffffffff823d8c80) at pf_purge+0x28
taskq_thread(ffffffff822c73e8) at taskq_thread+0x11a
end trace frame: 0x0, count: 9
https://www.openbsd.org/ddb.html describes the minimum info required in bug
reports. Insufficient info makes it difficult to find and fix bugs.
ddb{3}> show panic
*cpu3: uvm_fault(0xffffffff824be2f8, 0x17, 0, 2) -> e
ddb{3}>
ddb{3}> show reg
rdi 0x9
rsi 0xf
rbp 0xffff800022d59b80
rbx 0xfffffd842e15b7d8
rdx 0xffffffffffffffff
rcx 0x10
rax 0xf
r8 0xffff7fffffffffff
r9 0xffff800022d59d20
r10 0x362267f9c796ed3a
r11 0xcadda0efd2fc372f
r12 0xffff8000008c3000
r13 0xfffffd8310c597b0
r14 0xfffffd82c6826da0
r15 0xffff8000008c37e0
rip 0xffffffff81398f56 pfsync_q_del+0x96
cs 0x8
rflags 0x10286 __ALIGN_SIZE+0xf286
rsp 0xffff800022d59b50
ss 0x10
pfsync_q_del+0x96: movq %rdx,0x8(%rax)
ddb{3}> show locks
exclusive rwlock pf_state_lock r = 0 (0xffffffff822e2d58)
#0 witness_lock+0x311
#1 pf_purge_expired_states+0x17f
#2 pf_purge+0x28
#3 taskq_thread+0x11a
#4 proc_trampoline+0x1c
exclusive rwlock pf_lock r = 0 (0xffffffff822e2d28)
#0 witness_lock+0x311
#1 pf_purge_expired_states+0x173
#2 pf_purge+0x28
#3 taskq_thread+0x11a
#4 proc_trampoline+0x1c
exclusive rwlock pfstates r = 0 (0xffffffff822bf040)
#0 witness_lock+0x311
#1 pf_purge_expired_states+0x167
#2 pf_purge+0x28
#3 taskq_thread+0x11a
#4 proc_trampoline+0x1c
exclusive rwlock netlock r = 0 (0xffffffff822bb6a0)
#0 witness_lock+0x311
#1 rw_enter+0x292
#2 pf_purge_expired_states+0x15b
#3 pf_purge+0x28
#4 taskq_thread+0x11a
#5 proc_trampoline+0x1c
exclusive kernel_lock &kernel_lock r = 1 (0xffffffff824bd7e8)
#0 witness_lock+0x311
#1 __mp_acquire_count+0x38
#2 mi_switch+0x28b
#3 sleep_finish+0xfe
#4 rw_enter+0x232
#5 pf_purge_expired_states+0x15b
#6 pf_purge+0x28
#7 taskq_thread+0x11a
#8 proc_trampoline+0x1c
shared rwlock systq r = 0 (0xffffffff822c7458)
#0 witness_lock+0x311
#1 taskq_thread+0x10d
#2 proc_trampoline+0x1c
exclusive mutex &sc->sc_st_mtx r = 0 (0xffff8000008c37f0)
#0 witness_lock+0x311
#1 mtx_enter_try+0x95
#2 mtx_enter+0x48
#3 pfsync_q_del+0x34
#4 pfsync_delete_state+0x118
#5 pf_remove_state+0x14b
#6 pf_purge_expired_states+0x1b3
#7 pf_purge+0x28
#8 taskq_thread+0x11a
#9 proc_trampoline+0x1c
ddb{3}>
ddb{3}> ps
PID TID PPID UID S FLAGS WAIT COMMAND
64605 27158 1 0 3 0x100083 ttyin ksh
1647 514612 1 0 3 0x100098 kqread cron
48222 210533 67433 95 3 0x1100092 kqread smtpd
65914 35320 67433 103 3 0x1100092 kqread smtpd
61746 233409 67433 95 3 0x1100092 kqread smtpd
52667 256224 67433 95 3 0x100092 kqread smtpd
95906 203922 67433 95 3 0x1100092 kqread smtpd
57231 58537 67433 95 3 0x1100092 kqread smtpd
67433 152691 1 0 3 0x100080 kqread smtpd
97649 506323 1 0 3 0x88 kqread sshd
45366 57467 1 0 3 0x100080 kqread ntpd
77512 267891 6824 83 7 0x100012 ntpd
6824 88890 1 83 3 0x1100092 kqread ntpd
31005 238715 43236 74 3 0x1100092 bpf pflogd
43236 250601 1 0 3 0x80 netio pflogd
68108 521674 43371 73 3 0x1100090 kqread syslogd
43371 415292 1 0 3 0x100082 netio syslogd
81117 43543 0 0 3 0x14200 bored smr
86838 148691 0 0 3 0x14200 pgzero zerothread
80313 485970 0 0 3 0x14200 aiodoned aiodoned
32854 188214 0 0 3 0x14200 syncer update
29438 4815 0 0 3 0x14200 cleaner cleaner
37163 482518 0 0 3 0x14200 reaper reaper
99970 193361 0 0 3 0x14200 pgdaemon pagedaemon
16005 423786 0 0 3 0x14200 usbtsk usbtask
8859 281689 0 0 3 0x14200 usbatsk usbatsk
96446 45151 0 0 3 0x40014200 acpi0 acpi0
40490 16284 0 0 7 0x40014200 idle5
47574 460149 0 0 7 0x40014200 idle4
79401 251160 0 0 3 0x40014200 idle3
41337 430655 0 0 3 0x40014200 idle2
74515 339752 0 0 7 0x40014200 idle1
72276 301528 0 0 3 0x14200 bored sensors
70845 493314 0 0 3 0x14200 netlock softnet
52535 320222 0 0 3 0x14200 netlock softnet
84582 75425 0 0 3 0x14200 netlock softnet
31468 426237 0 0 3 0x14200 netlock softnet
2106 515368 0 0 3 0x14200 netlock softnet
77607 431181 0 0 3 0x14200 netlock softnet
58907 91384 0 0 3 0x14200 bored systqmp
*94877 250028 0 0 7 0x14200 systq
58401 35323 0 0 7 0x40014200 softclock
37921 329649 0 0 3 0x40014200 idle0
1 321132 0 0 3 0x82 wait init
0 0 -1 0 3 0x10200 scheduler swapper
ddb{3}>
ddb{3}> ps /o
TID PID UID PRFLAGS PFLAGS CPU COMMAND
267891 77512 83 0x100012 0 2 ntpd
*250028 94877 0 0x14000 0x200 3K systq
35323 58401 0 0x14000 0x40000200 0 softclock
ddb{3}>
ddb{3}> trace /t 0t267891
sleep_finish(ffff800022e66b90,1) at sleep_finish+0xfe
rw_enter(ffffffff822bb690,1) at rw_enter+0x232
filt_soprocess(fffffd83a5d5e088,0) at filt_soprocess+0x32
kqueue_register(fffffd83b24b2288,ffff800022e66dc0,0,ffff800022dff7a0) at
kqueue_register+0x6f4
ppollregister_evts(ffff800022dff7a0,ffff800022e66dc0,1,ffff800022e670b0,0)
at ppollregister_evts+0x83
ppollregister(ffff800022dff7a0,ffff800022e670b0,1,ffff800022e67138,ffff800022e6
7134) at ppollregister+0x209
doppoll(ffff800022dff7a0,7f7fffffad78,1,ffff800022e671b8,0,ffff800022e67260)
at doppoll+0x132
sys_poll(ffff800022dff7a0,ffff800022e67200,ffff800022e67260) at
sys_poll+0x6a
syscall(ffff800022e672d0) at syscall+0x35f
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x7f7fffffad40, count: -10
ddb{3}> trace /t 0t250028
fffffd8310c597b0(0,0,0,0,0,0) at 0xfffffd8310c597b0
Bad frame pointer: 0xffff8000008c3000
end trace frame: 0xffff8000008c3000, count: -1
ddb{3}> trace /t 0t35323
sleep_finish(ffff800022d53b50,1) at sleep_finish+0xfe
rw_enter(ffffffff822bb690,1) at rw_enter+0x232
igmp_slowtimo() at igmp_slowtimo+0x10
pfslowtimo(ffffffff82335318) at pfslowtimo+0xc7
timeout_run(ffffffff82335318) at timeout_run+0x93
softclock_thread(ffff8000fffff500) at softclock_thread+0x11d
end trace frame: 0x0, count: -6
ddb{3}>
ddb{3}> mach ddbcpu 0
Stopped at x86_ipi_db+0x12: leave
x86_ipi_db(ffffffff822edff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
__mp_lock(ffffffff824bd5e0) at __mp_lock+0xb3
__mp_acquire_count(ffffffff824bd5e0,1) at __mp_acquire_count+0x38
mi_switch() at mi_switch+0x28b
sleep_finish(ffff800022d53b50,1) at sleep_finish+0xfe
rw_enter(ffffffff822bb690,1) at rw_enter+0x232
igmp_slowtimo() at igmp_slowtimo+0x10
pfslowtimo(ffffffff82335318) at pfslowtimo+0xc7
timeout_run(ffffffff82335318) at timeout_run+0x93
softclock_thread(ffff8000fffff500) at softclock_thread+0x11d
end trace frame: 0x0, count: 3
ddb{0}> mach ddbcpu 1
Stopped at x86_ipi_db+0x12: leave
x86_ipi_db(ffff800022509ff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
acpicpu_idle() at acpicpu_idle+0x281
sched_idle(ffff800022509ff0) at sched_idle+0x280
end trace frame: 0x0, count: 10
ddb{1}> mach ddbcpu 2
Stopped at x86_ipi_db+0x12: leave
x86_ipi_db(ffff800022512ff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
__mp_lock(ffffffff824bd5e0) at __mp_lock+0xa0
__mp_acquire_count(ffffffff824bd5e0,1) at __mp_acquire_count+0x38
mi_switch() at mi_switch+0x28b
sleep_finish(ffff800022e66b90,1) at sleep_finish+0xfe
rw_enter(ffffffff822bb690,1) at rw_enter+0x232
filt_soprocess(fffffd83a5d5e088,0) at filt_soprocess+0x32
kqueue_register(fffffd83b24b2288,ffff800022e66dc0,0,ffff800022dff7a0) at
kqueue
_register+0x6f4
ppollregister_evts(ffff800022dff7a0,ffff800022e66dc0,1,ffff800022e670b0,0)
at p
pollregister_evts+0x83
ppollregister(ffff800022dff7a0,ffff800022e670b0,1,ffff800022e67138,ffff800022e6
7134) at ppollregister+0x209
doppoll(ffff800022dff7a0,7f7fffffad78,1,ffff800022e671b8,0,ffff800022e67260)
at
doppoll+0x132
sys_poll(ffff800022dff7a0,ffff800022e67200,ffff800022e67260) at
sys_poll+0x6a
end trace frame: 0xffff800022e672c0, count: 0
ddb{2}> mach ddbcpu 3
Stopped at pfsync_q_del+0x96: movq %rdx,0x8(%rax)
pfsync_q_del(fffffd82c6826da0) at pfsync_q_del+0x96
pfsync_delete_state(fffffd82c6826da0) at pfsync_delete_state+0x118
pf_remove_state(fffffd82c6826da0) at pf_remove_state+0x14b
pf_purge_expired_states(b3368) at pf_purge_expired_states+0x1b3
pf_purge(ffffffff823d8c80) at pf_purge+0x28
taskq_thread(ffffffff822c73e8) at taskq_thread+0x11a
end trace frame: 0x0, count: 9
ddb{3}> mach ddbcpu 4
Stopped at x86_ipi_db+0x12: leave
x86_ipi_db(ffff800022524ff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
acpicpu_idle() at acpicpu_idle+0x281
sched_idle(ffff800022524ff0) at sched_idle+0x280
end trace frame: 0x0, count: 10
ddb{4}> mach ddbcpu 5
Stopped at x86_ipi_db+0x12: leave
x86_ipi_db(ffff80002252dff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
acpicpu_idle() at acpicpu_idle+0x281
sched_idle(ffff80002252dff0) at sched_idle+0x280
end trace frame: 0x0, count: 10
ddb{5}>