On Wed, Apr 26, 2023 at 11:17:37PM +0300, Vitaliy Makkoveev wrote:
> Route timers and route labels protected by corresponding mutexes. `ifa'
> uses references counting for protection. No protection required for `rt'
> passed to rt_mpls_clear() because only current thread owns it.
>
> ok?
>
> Index: sys/net/route.c
> ===================================================================
> RCS file: /cvs/src/sys/net/route.c,v
> retrieving revision 1.418
> diff -u -p -r1.418 route.c
> --- sys/net/route.c 26 Apr 2023 16:09:44 -0000 1.418
> +++ sys/net/route.c 26 Apr 2023 20:11:16 -0000
> @@ -497,7 +497,6 @@ rtfree(struct rtentry *rt)
> KASSERT(!RT_ROOT(rt));
> atomic_dec_int(&rttrash);
>
> - KERNEL_LOCK();
> rt_timer_remove_all(rt);
> ifafree(rt->rt_ifa);
> rtlabel_unref(rt->rt_labelid);
> @@ -506,7 +505,6 @@ rtfree(struct rtentry *rt)
> #endif
> free(rt->rt_gateway, M_RTABLE, ROUNDUP(rt->rt_gateway->sa_len));
> free(rt_key(rt), M_RTABLE, rt_key(rt)->sa_len);
> - KERNEL_UNLOCK();
>
> pool_put(&rtentry_pool, rt);
> }
After running stress test successfully with this diff, next day
machine crashed while compiling a new kernel. It is unclear whether
it is related to the diff. The softdep in ps is problably processing
make output via ssh. Looks like recursive kernel stack overflow.
[-- MARK -- Fri Apr 28 13:25:00 2023]
kernel: protection fault trap, code=0
Stopped at rt_if_linkstate_change+0x21: movl 0x58(%rdi),%eax
ddb{3}>
ddb{3}> trace
rt_if_linkstate_change(c000000000000000,ffff800000784050,0) at rt_if_linkstate_
change+0x21
rtable_walk_helper(fffffd8746df9350,ffff8000247c98a0) at rtable_walk_helper+0x5
3
art_table_walk(ffff800000390900,fffffd8830272550,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x205
art_table_walk(ffff800000390900,fffffd8830272530,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec548,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec568,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec5c8,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec648,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec688,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec6c8,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec788,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec7a8,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec7c8,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec7e8,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec808,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8745fec828,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8746decdc0,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_table_walk(ffff800000390900,fffffd8746decea0,ffffffff813bde40,ffff8000247c9
8a0) at art_table_walk+0x26c
art_walk(ffff800000390900,ffffffff813bde40,ffff8000247c98a0) at art_walk+0xd1
rtable_walk(0,18,ffff8000247c9938,ffffffff813c2b70,ffff800000784050) at rtable_
walk+0xa4
art_walk(ffff800000390900,ffffffff813bde40,ffff8000247c98a0) at art_walk+0xd1
rtable_walk(0,18,ffff8000247c9938,ffffffff813c2b70,ffff800000784050) at rtable_
walk+0xa4
rt_if_track(ffff800000784050) at rt_if_track+0xdb
if_linkstate_task(3) at if_linkstate_task+0xb0
taskq_thread(ffff800000036180) at taskq_thread+0x100
end trace frame: 0x0, count: -23
ddb{3}> show panic
the kernel did not panic
ddb{3}> show register
rdi 0xc000000000000000
rsi 0xffff800000784050
rbp 0xffff8000247c8dc0
rbx 0xfffffd8746df9350
rdx 0
rcx 0xffff80002251c710
rax 0xc000000000000000
r8 0x8
r9 0x4
r10 0x12
r11 0xe5d48e0613cd564e
r12 0xffff8000247c8dd0
r13 0xfffffd8830272550
r14 0xffff8000247c98a0
r15 0xc000000000000000
rip 0xffffffff813c2b91 rt_if_linkstate_change+0x21
cs 0x8
rflags 0x10286 __ALIGN_SIZE+0xf286
rsp 0xffff8000247c8d60
ss 0
rt_if_linkstate_change+0x21: movl 0x58(%rdi),%eax
ddb{3}> ps
PID TID PPID UID S FLAGS WAIT COMMAND
54044 278626 14147 0 7 0x3 arp
14147 281297 48383 0 3 0x10008b sigsusp timeout
68485 464481 24635 0 2 0x3 cc
24635 123811 11134 0 3 0x10008b sigsusp sh
92304 333371 93014 0 2 0x3 cc
93014 60581 11134 0 3 0x10008b sigsusp sh
48369 298699 36744 0 2 0x3 cc
36744 19282 11134 0 3 0x10008b sigsusp sh
69130 443067 39578 0 7 0x3 cc
39578 43217 11134 0 3 0x10008b sigsusp sh
34899 440228 31189 0 2 0x3 cc
31189 515744 11134 0 3 0x10008b sigsusp sh
22583 212506 37076 0 7 0x3 cc
37076 2679 11134 0 3 0x10008b sigsusp sh
95169 406065 94286 0 2 0x3 cc
94286 369995 11134 0 3 0x10008b sigsusp sh
84618 162660 78605 0 7 0x3 cc
78605 283757 11134 0 3 0x10008b sigsusp sh
11134 326791 47280 0 3 0x10008b sigsusp make
15617 273881 13388 0 3 0x100083 ttyin ksh
47280 13997 13388 0 3 0x10008b sigsusp ksh
23630 345318 88977 0 3 0x100083 kqread tmux
88977 276563 55388 0 3 0x10008b sigsusp ksh
55388 151577 87454 0 3 0x9a kqread sshd
15480 8431 66142 0 3 0x100083 ttyin ksh
66142 42569 87454 0 3 0x9a kqread sshd
86009 430157 13388 0 3 0x100083 ttyin ksh
48383 121548 13388 0 3 0x10008b sigsusp ksh
13388 39922 1 0 3 0x100080 kqread tmux
15579 328714 0 0 3 0x14200 bored sosplice
76541 522891 1 0 3 0x100083 ttyin getty
46282 145613 1 0 3 0x100098 kqread cron
38280 449926 1 99 3 0x1100090 kqread sndiod
71509 185468 1 110 3 0x100090 kqread sndiod
18019 240833 39769 95 3 0x1100092 kqread smtpd
90534 225699 39769 103 3 0x1100092 kqread smtpd
63215 241112 39769 95 3 0x1100092 kqread smtpd
31591 133135 39769 95 3 0x100092 kqread smtpd
7010 284594 39769 95 3 0x1100092 kqread smtpd
16629 223245 39769 95 3 0x1100092 kqread smtpd
39769 232162 1 0 3 0x100080 kqread smtpd
78666 386316 7107 89 3 0x1100092 kqread relayd
68039 15578 7107 89 3 0x1100092 kqread relayd
36675 9476 7107 89 3 0x1100092 kqread relayd
366 363913 7107 89 3 0x1100092 kqread relayd
22383 211332 7107 89 3 0x1100092 kqread relayd
5429 118908 7107 89 3 0x1100092 kqread relayd
87324 495270 7107 89 3 0x1100092 kqread relayd
97321 350625 7107 89 3 0x1100092 kqread relayd
7107 170630 1 0 3 0x80 kqread relayd
20131 107836 54962 91 7 0x12 snmpd_metrics
54962 484362 1 0 3 0x100080 kqread snmpd
25469 328526 1 91 3 0x1100092 kqread snmpd
87454 304519 1 0 3 0x88 kqread sshd
88041 353542 0 0 3 0x14280 nfsidl nfsio
33661 69348 0 0 3 0x14280 nfsidl nfsio
4906 29973 0 0 3 0x14280 nfsidl nfsio
56338 501608 0 0 3 0x14280 nfsidl nfsio
43739 356618 1 0 3 0x100080 kqread ntpd
75045 81844 77856 83 3 0x100092 kqread ntpd
77856 128330 1 83 3 0x1100092 kqread ntpd
98958 231170 21584 74 3 0x1100092 bpf pflogd
21584 427610 1 0 3 0x80 netio pflogd
49485 125301 30425 73 3 0x1100090 kqread syslogd
30425 365569 1 0 3 0x100082 netio syslogd
59467 198560 28024 77 7 0x100012 dhcpleased
9716 376946 28024 77 3 0x100092 kqread dhcpleased
28024 465318 1 0 3 0x80 kqread dhcpleased
41224 514677 66676 115 7 0x100012 slaacd
25235 279438 66676 115 3 0x100092 kqread slaacd
66676 369311 1 0 3 0x100080 kqread slaacd
56468 167420 0 0 3 0x14200 bored smr
9359 95306 0 0 2 0x14200 zerothread
36151 36152 0 0 3 0x14200 aiodoned aiodoned
4186 491459 0 0 3 0x14200 syncer update
2296 260176 0 0 3 0x14200 cleaner cleaner
14222 66730 0 0 3 0x14200 reaper reaper
13161 137510 0 0 3 0x14200 pgdaemon pagedaemon
18227 374801 0 0 3 0x14200 usbtsk usbtask
12254 75529 0 0 3 0x14200 usbatsk usbatsk
32112 220223 0 0 3 0x40014200 acpi0 acpi0
84986 206194 0 0 3 0x40014200 idle7
65936 8777 0 0 3 0x40014200 idle6
95579 438230 0 0 3 0x40014200 idle5
86138 259143 0 0 3 0x40014200 idle4
23213 463290 0 0 3 0x40014200 idle3
47905 271216 0 0 3 0x40014200 idle2
12000 253171 0 0 3 0x40014200 idle1
55632 435627 0 0 3 0x14200 bored sensors
*30374 197019 0 0 7 0x14200 softnet
97395 314588 0 0 3 0x14200 bored softnet
13707 147072 0 0 3 0x14200 bored softnet
1764 515477 0 0 3 0x14200 bored softnet
46234 501954 0 0 3 0x14200 bored systqmp
93391 98530 0 0 3 0x14200 bored systq
87333 16097 0 0 3 0x40014200 bored softclock
66847 163540 0 0 3 0x40014200 idle0
1 154810 0 0 3 0x82 wait init
0 0 -1 0 3 0x10200 scheduler swapper
ddb{0}> trace
x86_ipi_db(ffffffff83213ff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
__mp_lock(ffffffff83453000) at __mp_lock+0x6e
intr_handler(ffff800024a518c0,ffff800000381400) at intr_handler+0x48
Xintr_ioapic_edge16_untramp() at Xintr_ioapic_edge16_untramp+0x18f
Xspllower() at Xspllower+0x1d
ifiq_input(ffff80000078e450,ffff800024a51a40) at ifiq_input+0x196
em_rxeof(ffff80000078d200) at em_rxeof+0x44e
em_intr(ffff80000078e000) at em_intr+0x93
intr_handler(ffff800024a51b80,ffff80000038ec00) at intr_handler+0x72
Xintr_ioapic_edge27_untramp() at Xintr_ioapic_edge27_untramp+0x18f
_kernel_lock() at _kernel_lock+0xb9
softintr_dispatch(0) at softintr_dispatch+0x4d
Xsoftclock() at Xsoftclock+0x23
_kernel_lock() at _kernel_lock+0xb9
syscall(ffff800024a51e50) at syscall+0x39b
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x7a79a69fcf50, count: -18
ddb{1}> trace
x86_ipi_db(ffff800022509ff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xb6
sys_kbind(ffff800024841b78,ffff800024a5ce90,ffff800024a5cef0) at sys_kbind+0x22
4
syscall(ffff800024a5cf60) at syscall+0x3d4
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x73c954bbdbc8, count: -7
ddb{2}> trace
x86_ipi_db(ffff800022512ff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
end of kernel
end trace frame: 0x710afcf775a0, count: -3
ddb{4}> trace
x86_ipi_db(ffff800022524ff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
end of kernel
end trace frame: 0x74f999744f40, count: -3
ddb{5}> trace
x86_ipi_db(ffff80002252dff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xb0
syscall(ffff800024a63810) at syscall+0x39b
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x77c9518a37e0, count: -6
ddb{6}> trace
x86_ipi_db(ffff800022536ff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xb0
syscall(ffff8000248c5460) at syscall+0x39b
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x75c56168b570, count: -6
ddb{7}> trace
x86_ipi_db(ffff80002253fff0) at x86_ipi_db+0x16
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xb9
syscall(ffff800024889a60) at syscall+0x39b
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x73731fa87df0, count: -6