On 24.12.2021. 0:55, Alexander Bluhm wrote:
> I think we can remove the ipsec_in_use workaround now.  The IPsec
> path is protected with the kernel lock.
> 
> There are some issues left:
> - npppd l2pt ipsecflowinfo is not MP safe
> - the acquire SA feature is not MP safe
> - Hrvoje has seen a panic with sasync
> 
> If you use one of these, the diff below should trigger crashes faster.
> If you use only regular IPsec or forwarding, I hope it is stable.

Hi,

after hitting sasyncd setup with this diff for some time i've run
ipsecctl -sa just to see what's going on and box panic


r620-1# ipsecctl -sa
uvm_fault(0xffffffff82200c18, 0x417, 0, 2) -> e
kernel: page fault trap, code=0
Stopped at      pfsync_delete_tdb+0x84: movq    %rcx,0x8(%rsi)
    TID    PID    UID     PRFLAGS     PFLAGS  CPU  COMMAND
 290490  40316      0         0x3          0    3  ipsecctl
  10869  22801     68        0x10          0    5  sasyncd
 504041  13202     68        0x10       0x80    1  isakmpd
 476980   6400      0    0x100000          0    2  ntpd
 224100  72648      0     0x14000      0x200    4  reaper
* 75659  10211      0     0x14000 0x40000200    0K softclock
pfsync_delete_tdb(ffff8000012e8008) at pfsync_delete_tdb+0x84
tdb_free(ffff8000012e8008) at tdb_free+0x67
tdb_timeout(ffff8000012e8008) at tdb_timeout+0x7e
softclock_thread(ffff8000fffff260) at softclock_thread+0x13b
end trace frame: 0x0, count: 11
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{0}>



ddb{0}> show reg
rdi                              0x4
rsi                            0x40f
rbp               0xffff800022c4e390
rbx                                0
rdx               0xffff8000006b39e8
rcx               0xffffffffffffffff
rax               0xffffffffffffffff
r8                              0x1f
r9                                 0
r10               0xbaf844ce8eec335d
r11               0xb9858c0c287d2c4d
r12               0xffff8000006b3000
r13               0xffffffff821c5e60    timeout_proc
r14               0xffff8000012e8008
r15               0xffff8000006b39f8
rip               0xffffffff8131a254    pfsync_delete_tdb+0x84
cs                               0x8
rflags                       0x10286    __ALIGN_SIZE+0xf286
rsp               0xffff800022c4e360
ss                              0x10
pfsync_delete_tdb+0x84: movq    %rcx,0x8(%rsi)
ddb{0}>


ddb{0}> show all tdb
0xffff8000012e8008: f9f247f0 192.168.42.100->192.168.42.112:50 #0 000d1040
0xffff8000012e8428: 959c114b 192.168.42.112->192.168.42.100:50 #2 00001002
0xffff8000012e8848: b7eb65bc 192.168.42.113->192.168.42.100:50 #2 00001002
0xffff8000012e9ce8: 55495192 192.168.42.100->192.168.42.113:50 #3 000d1002
ddb{0}>


ddb{0}> show tdb /f 0xffff8000012e8008
tdb at 0xffff8000012e8008
             hnext: 0x0
             dnext: 0x0
             snext: 0x0
             inext: 0x0
             onext: 0x0
             xform: 0x0
            refcnt: 0
       encalgxform: 0xffffffff81f36090
      authalgxform: 0xffffffff81f36380
      compalgxform: 0x0
             flags: d1040<DELETED,TUNNELING,USEDTUNNEL,PFSYNC,PFSYNC_RPL>
               seq: 8
   exp_allocations: 0
  soft_allocations: 0
   cur_allocations: 0
         exp_bytes: 0
        soft_bytes: 0
         cur_bytes: 1272048336570
       exp_timeout: 1200
      soft_timeout: 1080
       established: 1640372736
         first_use: 1640372754
    soft_first_use: 0
     exp_first_use: 0
         last_used: 1640419926
       last_marked: 0
          cryptoid: 0
           tdb_spi: f9f247f0
         amxkeylen: 20
         emxkeylen: 20
             ivlen: 8
            sproto: 50
               wnd: 16
            satype: 2
           updates: 158
               dst: 192.168.42.112
               src: 192.168.42.100
            amxkey: 0x0
            emxkey: 0x0
               rpl: 5256398086
               ids: 0xffff8000012d8800
       ids_swapped: 0
               mtu: 0
        mtutimeout: 0
     udpencap_port: 0
               tag: 0
               tap: 0
           rdomain: 0
      rdomain_post: 0
ddb{0}>

   PID     TID   PPID    UID  S       FLAGS  WAIT          COMMAND
 40316  290490   5050      0  7         0x3                ipsecctl
 22801   10869  51239     68  7        0x10                sasyncd
 51239   39174      1      0  3        0x80  kqread        sasyncd
 13202  504041  43160     68  7        0x90                isakmpd
 43160   53413      1      0  3        0x80  netio         isakmpd
  5050   12722      1      0  3    0x10008b  sigsusp       ksh
 64387  345990      1      0  3    0x100098  poll          cron
 58819  219224  16427     95  3    0x100092  kqread        smtpd
 67207  340852  16427    103  3    0x100092  kqread        smtpd
 97983  457473  16427     95  3    0x100092  kqread        smtpd
  6608   99059  16427     95  3    0x100092  kqread        smtpd
 91670  313820  16427     95  3    0x100092  kqread        smtpd
  7571   97218  16427     95  3    0x100092  kqread        smtpd
 16427  464572      1      0  3    0x100080  kqread        smtpd
 66627  364623      1      0  3        0x88  poll          sshd
  6400  476980      1      0  7    0x100000                ntpd
 15200  447105  93293     83  3    0x100092  poll          ntpd
 93293   59596      1     83  2    0x100012                ntpd
 46409  262850  63547     74  3    0x100092  bpf           pflogd
 63547  127229      1      0  3        0x80  netio         pflogd
 72530   73213   4587     73  3    0x100090  kqread        syslogd
  4587  512426      1      0  3    0x100082  netio         syslogd
 17655  381404      0      0  3     0x14200  bored         smr
 73757  204335      0      0  3     0x14200  pgzero        zerothread
 10290  119553      0      0  3     0x14200  aiodoned      aiodoned
 87569   15096      0      0  3     0x14200  syncer        update
 90413  144932      0      0  3     0x14200  cleaner       cleaner
 72648  224100      0      0  7     0x14200                reaper
 65898  277187      0      0  3     0x14200  pgdaemon      pagedaemon
 72836  339003      0      0  3     0x14200  usbtsk        usbtask
 57295  478285      0      0  3     0x14200  usbatsk       usbatsk
  9904   80675      0      0  3  0x40014200  acpi0         acpi0
 60370  374031      0      0  3  0x40014200                idle5
 66091  260777      0      0  3  0x40014200                idle4
 44655  171688      0      0  3  0x40014200                idle3
 12526  257304      0      0  3  0x40014200                idle2
 46398  213841      0      0  3  0x40014200                idle1
 37584   47737      0      0  3     0x14200  bored         sensors
 60719  433549      0      0  3     0x14200  bored         softnet
  7704  416964      0      0  3     0x14200  bored         softnet
 31937  522056      0      0  3     0x14200  bored         softnet
 79009  468497      0      0  3     0x14200  bored         softnet
  3925  227725      0      0  3     0x14200  bored         systqmp
 44335   71027      0      0  3     0x14200  bored         systq
*10211   75659      0      0  7  0x40014200                softclock
 88062   62748      0      0  3  0x40014200                idle0
     1  493056      0      0  3        0x82  wait          init
     0       0     -1      0  3     0x10200  scheduler     swapper


ddb{0}> mach ddbcpu 1
Stopped at      x86_ipi_db+0x12:        leave
x86_ipi_db(ffff800022409ff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
__mp_acquire_count(ffffffff821f1760,3) at __mp_acquire_count+0x92
mi_switch() at mi_switch+0x299
sleep_finish(ffff800022d970f0,1) at sleep_finish+0x11c
msleep(fffffd83b0aeeda8,fffffd83b0aeeda8,318,ffffffff81ead720,1771) at
msleep+0xcc
kqueue_sleep(fffffd83b0aeeda8,ffff800022d97600) at kqueue_sleep+0xbe
kqueue_scan(ffff800022d973a0,8,ffff800022d972a0,ffff800022d97600,ffff8000ffff42
b0,ffff800022d9756c) at kqueue_scan+0xfc
dopselect(ffff8000ffff42b0,17,624934c5f70,623ea8556f0,0,ffff800022d97600,b25bc6
5c0b9e131b,ffff8000ffff42b0) at dopselect+0x415
sys_pselect(ffff8000ffff42b0,ffff800022d97670,ffff800022d976c0) at
sys_pselect+0xdb
syscall(ffff800022d97730) at syscall+0x374
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x7f7ffffc88c0, count: 2
ddb{1}>


ddb{1}> mach ddbcpu 2
Stopped at      x86_ipi_db+0x12:        leave
x86_ipi_db(ffff800022412ff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xb2
selwakeup(fffffd83b37dfbf8) at selwakeup+0x11
uipc_usrreq(fffffd83b37df8c0,8,0,0,0,ffff8000ffff4d30) at uipc_usrreq+0x470
soreceive(fffffd83b37df8c0,ffff800022d51480,ffff800022d51430,0,ffff800022d51470
,ffff800022d515dc,419d63b6f434ec76) at soreceive+0xc0d
recvit(ffff8000ffff4d30,3,ffff800022d515b0,0,ffff800022d51690) at
recvit+0x200
sys_recvmsg(ffff8000ffff4d30,ffff800022d51640,ffff800022d51690) at
sys_recvmsg+0xd4
syscall(ffff800022d51700) at syscall+0x374
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x7f7ffffd8390, count: 4
ddb{2}>


ddb{2}> mach ddbcpu 3
Stopped at      x86_ipi_db+0x12:        leave
x86_ipi_db(ffff80002241bff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xa0
syscall(ffff800022d0ddc0) at syscall+0x278
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x7f7ffffcf2e0, count: 9
ddb{3}>


ddb{3}> mach ddbcpu 4
Stopped at      x86_ipi_db+0x12:        leave
x86_ipi_db(ffff800022424ff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xab
uvm_unmap_detach(ffff800022cb4568,1) at uvm_unmap_detach+0xc5
uvm_map_teardown(fffffd83ae059228) at uvm_map_teardown+0x1cb
uvmspace_free(fffffd83ae059228) at uvmspace_free+0x5a
reaper(ffff8000ffff87e8) at reaper+0x15d
end trace frame: 0x0, count: 7
ddb{4}>


ddb{4}> mach ddbcpu 5
Stopped at      x86_ipi_db+0x12:        leave
x86_ipi_db(ffff80002242dff0) at x86_ipi_db+0x12
x86_ipi_handler() at x86_ipi_handler+0x80
Xresume_lapic_ipi() at Xresume_lapic_ipi+0x23
_kernel_lock() at _kernel_lock+0xb2
syscall(ffff800022d578a0) at syscall+0x278
Xsyscall() at Xsyscall+0x128
end of kernel
end trace frame: 0x7f7ffffeaad0, count: 9
ddb{5}>

Reply via email to