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

Reply via email to