On Tue, Jun 28, 2022 at 10:51:29AM +0200, Alexander Bluhm wrote:
> arpintr() looks MP safe and I cannot trigger a crash with this diff.
Running parallel forwarding and arp -d in a loop triggers route
NULL pointer dereference after a while. I have to figure out if
it is related to this diff.
bluhm
root@ot31:.../~# while :; do arp -nd 10.6.16.36 >/dev/null; done
arp: delete: can't locate 10.6.16.36
arp: delete: can't locate 10.6.16.36
arp: delete: can't locate 10.6.16.36
arp: delete: can't locate 10.6.16.36
uvmp_afnaicu:lt (0 x f ff f ff f f 8 31 a 59 9 8 , 0 x6 0, 0, 2
) - > e
kkeerrnneell: pdagieag fnoasultict t ra p , c o de = 0 a
Stopped at rtref+0x11: lock incl 0x60(%rdi) s
TID PID UID PRFLAGS PFLAGS CPU COMMAND
202508 43068 0 0x100003 0 3 arp
37126 11508 91 0x1000012 0 5 snmpd
340135 94731 0 0x14000 0x200 1 softnet
230690 38637 0 0x14000 0x200 2 softnet
33711 215 0 0x14000 0x200 4 softnet
*104852 83709 0 0x14000 0x200 6 softnet
rtref(0) at rtref+0x11
rtable_match(0,ffff8000246b6e98,fffffd800b58e658) at rtable_match+0xb9
rtalloc_mpath(ffff8000246b6e98,fffffd800b58e658,0) at rtalloc_mpath+0x2e
in_ouraddr(fffffd80b278d300,ffff80000077d048,ffff8000246b6f18) at in_ouraddr+0x
84
ip_input_if(ffff8000246b6fb8,ffff8000246b6fc4,4,0,ffff80000077d048) at ip_input
_if+0x1cd
ipv4_input(ffff80000077d048,fffffd80b278d300) at ipv4_input+0x39
ether_input(ffff80000077d048,fffffd80b278d300) at ether_input+0x3ad
if_input_process(ffff80000077d048,ffff8000246b70a8) at if_input_process+0x6f
ifiq_process(ffff800000781100) at ifiq_process+0x69
taskq_thread(ffff800000036080) at taskq_thread+0x100
end trace frame: 0x0, count: 5
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{6}> show register
rdi 0
rsi 0xfffffd8834a02590
rbp 0xffff8000246b6dc0
rbx 0xffff8000246b6dd8
rdx 0
rcx 0xffff8000224377e0
rax 0
r8 0
r9 0x4
r10 0x24
r11 0xf4ba682f767b269e
r12 0xfffffd8834a02590
r13 0xffff8000246b6e98
r14 0
r15 0xfffffd800b58e658
rip 0xffffffff813b2691 rtref+0x11
cs 0x8
rflags 0x10282 __ALIGN_SIZE+0xf282
rsp 0xffff8000246b6db0
ss 0x10
rtref+0x11: lock incl 0x60(%rdi)
ddb{6}> show panic
*cpu6: uvm_fault(0xffffffff831a5998, 0x60, 0, 2) -> e
cpu2: kernel diagnostic assertion "(rt->rt_flags & RTF_MPATH) || mrt->rt_prior
ity != prio" failed: file "/usr/src/sys/net/rtable.c", line 613
ddb{6}> trace
rtref(0) at rtref+0x11
rtable_match(0,ffff8000246b6e98,fffffd800b58e658) at rtable_match+0xb9
rtalloc_mpath(ffff8000246b6e98,fffffd800b58e658,0) at rtalloc_mpath+0x2e
in_ouraddr(fffffd80b278d300,ffff80000077d048,ffff8000246b6f18) at in_ouraddr+0x
84
ip_input_if(ffff8000246b6fb8,ffff8000246b6fc4,4,0,ffff80000077d048) at ip_input
_if+0x1cd
ipv4_input(ffff80000077d048,fffffd80b278d300) at ipv4_input+0x39
ether_input(ffff80000077d048,fffffd80b278d300) at ether_input+0x3ad
if_input_process(ffff80000077d048,ffff8000246b70a8) at if_input_process+0x6f
ifiq_process(ffff800000781100) at ifiq_process+0x69
taskq_thread(ffff800000036080) at taskq_thread+0x100
end trace frame: 0x0, count: -10
ddb{6}> ps
PID TID PPID UID S FLAGS WAIT COMMAND
43068 202508 86288 0 7 0x100003 arp
16981 183305 55181 0 3 0x100083 kqread top
55181 168823 55818 0 3 0x10008b sigsusp ksh
55818 177517 59472 0 3 0x9a kqread sshd
61572 18246 0 0 3 0x14200 bored sosplice
86288 511512 1 0 3 0x10008b sigsusp ksh
88947 37559 1 0 3 0x100098 kqread cron
33580 243044 1 99 3 0x1100090 kqread sndiod
96861 268522 1 110 3 0x100090 kqread sndiod
78020 360065 25250 95 3 0x1100092 kqread smtpd
21363 422206 25250 103 3 0x1100092 kqread smtpd
26374 175617 25250 95 3 0x1100092 kqread smtpd
50987 371703 25250 95 3 0x100092 kqread smtpd
93507 389621 25250 95 3 0x1100092 kqread smtpd
79576 150347 25250 95 3 0x1100092 kqread smtpd
25250 448177 1 0 3 0x100080 kqread smtpd
8305 136296 1 0 3 0x80 kqread relayd
33505 102618 1 89 3 0x1100092 kqread relayd
2184 364276 1 89 3 0x1100092 kqread relayd
33987 290534 1 89 3 0x1100092 kqread relayd
88165 408505 1 89 3 0x1100092 kqread relayd
28865 15769 1 89 3 0x1100092 kqread relayd
39596 460434 1 89 3 0x1100092 kqread relayd
25914 79064 1 89 3 0x1100092 kqread relayd
43512 132169 1 89 3 0x1100092 kqread relayd
67218 210109 1 0 3 0x100080 kqread snmpd
11508 37126 1 91 7 0x1000012 snmpd
59472 479145 1 0 3 0x88 kqread sshd
53178 20916 0 0 3 0x14280 nfsidl nfsio
95307 371149 0 0 3 0x14280 nfsidl nfsio
42041 401497 0 0 3 0x14280 nfsidl nfsio
6638 200768 0 0 3 0x14280 nfsidl nfsio
62366 44451 1 0 3 0x100080 kqread ntpd
40975 350900 41890 83 3 0x100092 kqread ntpd
41890 513098 1 83 3 0x1100092 kqread ntpd
75435 440365 37802 74 3 0x1100092 bpf pflogd
37802 419185 1 0 3 0x80 netio pflogd
73341 244144 42007 73 3 0x1100090 kqread syslogd
42007 22105 1 0 3 0x100082 netio syslogd
39675 433062 1 0 3 0x100080 kqread resolvd
5108 418924 90895 77 3 0x100092 kqread dhcpleased
7706 410184 90895 77 3 0x100092 kqread dhcpleased
90895 140437 1 0 3 0x80 kqread dhcpleased
19547 107006 34432 115 3 0x100092 kqread slaacd
15050 195077 34432 115 3 0x100092 kqread slaacd
34432 436921 1 0 3 0x100080 kqread slaacd
62855 212226 0 0 3 0x14200 bored smr
88140 302486 0 0 3 0x14200 pgzero zerothread
22065 33268 0 0 3 0x14200 aiodoned aiodoned
81626 452959 0 0 3 0x14200 syncer update
10653 14420 0 0 3 0x14200 cleaner cleaner
95247 324422 0 0 3 0x14200 reaper reaper
43938 437255 0 0 3 0x14200 pgdaemon pagedaemon
13893 163489 0 0 3 0x14200 usbtsk usbtask
59494 306157 0 0 3 0x14200 usbatsk usbatsk
95083 399470 0 0 3 0x40014200 acpi0 acpi0
11611 12128 0 0 7 0x40014200 idle7
24792 245853 0 0 3 0x40014200 idle6
60405 141192 0 0 3 0x40014200 idle5
52343 110720 0 0 3 0x40014200 idle4
74019 238412 0 0 3 0x40014200 idle3
13427 316688 0 0 3 0x40014200 idle2
35082 126760 0 0 3 0x40014200 idle1
50867 401832 0 0 3 0x14200 bored sensors
94731 340135 0 0 7 0x14200 softnet
38637 230690 0 0 7 0x14200 softnet
215 33711 0 0 7 0x14200 softnet
*83709 104852 0 0 7 0x14200 softnet
91832 268994 0 0 3 0x14200 artnfini systqmp
76592 65076 0 0 3 0x14200 bored systq
88699 473337 0 0 3 0x40014200 bored softclock
94119 197022 0 0 7 0x40014200 idle0
1 144699 0 0 3 0x82 wait init
0 0 -1 0 3 0x10200 scheduler swapper