Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lurk panics with VirtualBox 7.1 #51

Open
thorstenhirsch opened this issue Sep 15, 2024 · 1 comment
Open

lurk panics with VirtualBox 7.1 #51

thorstenhirsch opened this issue Sep 15, 2024 · 1 comment

Comments

@thorstenhirsch
Copy link

thorstenhirsch commented Sep 15, 2024

I tried to use lurk for investigating a problem with VirtualBox (a segfault is thrown when starting a VM), but it throws a panic before I can trigger the problem:

$ lurk virtualbox      
[129757] execve("", "", "") = 0
[129757] brk(0x0) = 0x55555566F000
[129757] access("/etc/ld.so.preload", 4) = -2
[129757] openat(4294967196, "/etc/ld.so.cache", 524288) = 3
[129757] fstat(3, 0x7FFFFFFFCC40) = 0
[129757] mmap(0x0, 186063, 1, 2, 3, 0) = 0x7FFFF7F93000
[129757] close(3) = 0
[129757] openat(4294967196, "/usr/lib/libreadline.so.8", 524288) = 3
[129757] read(3, "ELF\u0002\u0001\u0001", 832) = 832
[129757] fstat(3, 0x7FFFFFFFCC40) = 0
[129757] mmap(0x0, 8192, 3, 34, 4294967295, 0) = 0x7FFFF7F91000
[129757] mmap(0x0, 350904, 1, 2050, 3, 0) = 0x7FFFF7F3B000
[129757] mmap(0x7FFFF7F50000, 188416, 5, 2066, 3, 86016) = 0x7FFFF7F50000
[129757] mmap(0x7FFFF7F7E000, 36864, 1, 2066, 3, 274432) = 0x7FFFF7F7E000
[129757] mmap(0x7FFFF7F87000, 36864, 3, 2066, 3, 307200) = 0x7FFFF7F87000
[129757] mmap(0x7FFFF7F90000, 2744, 3, 50, 4294967295, 0) = 0x7FFFF7F90000
[129757] close(3) = 0
[129757] openat(4294967196, "/usr/lib/libc.so.6", 524288) = 3
[129757] read(3, "ELF\u0002\u0001\u0001\u0003", 832) = 832
[129757] pread64(3, "\u0006", 784, 64) = 784
[129757] fstat(3, 0x7FFFFFFFCC20) = 0
[129757] pread64(3, "\u0006", 784, 64) = 784
[129757] mmap(0x0, 2034616, 1, 2050, 3, 0) = 0x7FFFF7D4A000
[129757] mmap(0x7FFFF7D6E000, 1511424, 5, 2066, 3, 147456) = 0x7FFFF7D6E000
[129757] mmap(0x7FFFF7EDF000, 319488, 1, 2066, 3, 1658880) = 0x7FFFF7EDF000
[129757] mmap(0x7FFFF7F2D000, 24576, 3, 2066, 3, 1978368) = 0x7FFFF7F2D000
[129757] mmap(0x7FFFF7F33000, 31672, 3, 50, 4294967295, 0) = 0x7FFFF7F33000
[129757] close(3) = 0
[129757] openat(4294967196, "/usr/lib/libncursesw.so.6", 524288) = 3
[129757] read(3, "ELF\u0002\u0001\u0001", 832) = 832
[129757] fstat(3, 0x7FFFFFFFCC00) = 0
[129757] mmap(0x0, 453856, 1, 2050, 3, 0) = 0x7FFFF7CDB000
[129757] mmap(0x7FFFF7CE8000, 290816, 5, 2066, 3, 53248) = 0x7FFFF7CE8000
[129757] mmap(0x7FFFF7D2F000, 90112, 1, 2066, 3, 344064) = 0x7FFFF7D2F000
[129757] mmap(0x7FFFF7D45000, 20480, 3, 2066, 3, 434176) = 0x7FFFF7D45000
[129757] close(3) = 0
[129757] mmap(0x0, 8192, 3, 34, 4294967295, 0) = 0x7FFFF7CD9000
[129757] arch_prctl(4098, 0x7FFFF7CD9B80) = 0
[129757] set_tid_address(0x7FFFF7CD9E50) = 0x1FADD
[129757] set_robust_list(0x7FFFF7CD9E60, 24) = 0
[129757] rseq() = 0
[129757] mprotect(0x7FFFF7F2D000, 16384, 1) = 0
[129757] mprotect(0x7FFFF7D45000, 16384, 1) = 0
[129757] mprotect(0x7FFFF7F87000, 12288, 1) = 0
[129757] mprotect(0x55555565F000, 12288, 1) = 0
[129757] mprotect(0x7FFFF7FFB000, 8192, 1) = 0
[129757] prlimit64(0, 3, 0x0, 0x7FFFFFFFD7A0) = 0
[129757] munmap(0x7FFFF7F93000, 186063) = 0
[129757] openat(4294967196, "/dev/tty", 2050) = 3
[129757] close(3) = 0
[129757] getrandom("ç\u0011gK\u000fák", 8, 1) = 8
[129757] brk(0x0) = 0x55555566F000
[129757] brk(0x555555690000) = 0x555555690000
[129757] openat(4294967196, "/usr/lib/locale/locale-archive", 524288) = 3
[129757] fstat(3, 0x7FFFF7F32800) = 0
[129757] mmap(0x0, 3420784, 1, 2, 3, 0) = 0x7FFFF7800000
[129757] close(3) = 0
[129757] openat(4294967196, "/usr/lib/gconv/gconv-modules.cac...", 524288) = 3
[129757] fstat(3, 0x7FFFFFFFD530) = 0
[129757] mmap(0x0, 27010, 1, 1, 3, 0) = 0x7FFFF7FBA000
[129757] close(3) = 0
[129757] futex(0x7FFFF7F3272C, 129, 2147483647, 0x0, 3, 0) = 0
[129757] getuid(0x7FFFF7F32920) = 501
[129757] getgid(0x0) = 100
[129757] geteuid(0x0) = 501
[129757] getegid(0x0) = 100
[129757] rt_sigprocmask(0, 0x0, 0x5555556660A8, 8) = 0
[129757] rt_sigaction(17, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] rt_sigaction(17, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] rt_sigaction(2, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] rt_sigaction(2, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] rt_sigaction(3, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] rt_sigaction(3, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] rt_sigaction(20, 0x7FFFFFFFD480, 0x7FFFFFFFD520) = 0
[129757] rt_sigaction(20, 0x7FFFFFFFD480, 0x7FFFFFFFD520) = 0
[129757] rt_sigaction(21, 0x7FFFFFFFD480, 0x7FFFFFFFD520) = 0
[129757] rt_sigaction(21, 0x7FFFFFFFD480, 0x7FFFFFFFD520) = 0
[129757] rt_sigaction(22, 0x7FFFFFFFD480, 0x7FFFFFFFD520) = 0
[129757] rt_sigaction(22, 0x7FFFFFFFD480, 0x7FFFFFFFD520) = 0
[129757] rt_sigprocmask(0, 0x0, 0x555555665CA0, 8) = 0
[129757] rt_sigaction(3, 0x7FFFFFFFD4A0, 0x7FFFFFFFD540) = 0
[129757] uname(0x7FFFFFFFD5C0) = 0
[129757] newfstatat(4294967196, "/home/torti", 0x7FFFFFFFD4D0, 0) = 0
[129757] newfstatat(4294967196, ".", 0x7FFFFFFFD440, 0) = 0
[129757] newfstatat(4294967196, "/home", 0x7FFFFFFFD4C0, 0) = 0
[129757] newfstatat(4294967196, "/home/torti", 0x7FFFFFFFD4C0, 0) = 0
[129757] newfstatat(4294967196, "/home/torti", 0x7FFFFFFFD5A0, 0) = 0
[129757] getpid(0x55555567A990) = 0x1FADD
[129757] getppid(0x1) = 0x1FADC
[129757] getpid(0x7FFFFFFFD630) = 0x1FADD
[129757] getppid(0x7FFFFFFFD630) = 0x1FADC
[129757] getpid(0x7FFFFFFFD640) = 0x1FADD
[129757] getppid(0x7FFFFFFFD640) = 0x1FADC
[129757] getpgrp(0x0) = 0x1FADC
[129757] ioctl(2, 21519, 0x7FFFFFFFD714) = 0
[129757] rt_sigaction(17, 0x7FFFFFFFD470, 0x7FFFFFFFD510) = 0
[129757] prlimit64(0, 6, 0x0, 0x7FFFFFFFD6E0) = 0
[129757] rt_sigprocmask(0, 0x0, 0x555555666188, 8) = 0
[129757] openat(4294967196, "/usr/bin/virtualbox", 0) = 3
[129757] newfstatat(4294967196, "/usr/bin/virtualbox", 0x7FFFFFFFD810, 0) = 0
[129757] ioctl(3, 21505, 0x7FFFFFFFD820) = -25
[129757] lseek(3, 0, 1) = 0
[129757] read(3, "#!/bin/sh\n## @file\n# Oracle Virt...", 80) = 80
[129757] lseek(3, 0, 0) = 0
[129757] prlimit64(0, 7, 0x0, 0x7FFFFFFFD850) = 0
[129757] fcntl(255, 1) = -9
[129757] dup2(3, 255) = 255
[129757] close(3) = 0
[129757] fcntl(255, 2) = 0
[129757] fcntl(255, 3) = 32768
[129757] fstat(255, 0x7FFFFFFFD7D0) = 0
[129757] lseek(255, 0, 1) = 0
[129757] read(255, "#!/bin/sh\n## @file\n# Oracle Virt...", 5875) = 5875
[129757] pipe2(140737488342904, 0) = 0
[129757] rt_sigprocmask(0, 0x7FFFFFFFCE70, 0x7FFFFFFFCDF0, 8) = 0
[129757] rt_sigprocmask(2, 0x7FFFFFFFCDF0, 0x0, 8) = 0
[129757] rt_sigprocmask(0, 0x0, 0x7FFFFFFFCC30, 8) = 0
[129757] rt_sigprocmask(0, 0x7FFFFFFFCD30, 0x7FFFFFFFCCB0, 8) = 0
[129757] lseek(255, -4817, 1) = 1058
[129757] clone(0x1200011, 0) = 0x1FADE
[129757] rt_sigprocmask(2, 0x7FFFFFFFCCB0, 0x0, 8) = 0
[129757] rt_sigaction(17, 0x7FFFFFFFCDE0, 0x7FFFFFFFCE80) = 0
[129757] close(4) = 0
[129757] rt_sigprocmask(0, 0x7FFFFFFFD020, 0x7FFFFFFFCF80, 8) = 0
[129757] read(3, "/usr/bin/VBox\n", 4096) = 14
[129757] read(3, "/usr/bin/VBox\n", 4096) = 0
[129757] close(3) = 0
[129757] wait4(4294967295, 140737488339664, 1, 0x0) = 0x1FADE
[129757] wait4(4294967295, 140737488339664, 1, 0x0) = -10
thread 'main' panicked at /build/.cargo/registry/src/index.crates.io-6f17d22bba15001f/syscalls-0.6.18/src/arch/x86_64.rs:5:1:
invalid syscall: 4294967295
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

So, this happens when opening the Qt6 GUI of VirtualBox. The application is running fine at this state, so I don't know why lurk crashes. The segmentation fault in VirtualBox I mentioned earlier only happens at a later point, so it is not the cause of lurk's crash.

system: arch linux, amd64, kernel 6.10.10
lurk version 0.3.7 (extra/lurk package)

@gepbird
Copy link

gepbird commented Dec 25, 2024

I get the same panic message when tracing nvim and saving a file:

~ ❯ sudo -E lurk -p $(pidof nvim) | grep -v epoll_pwait 
[227021] mmap(0x7EC2B0C21000, 131072, 3, 34, 4294967295, 0) = 0x7EC2B0BE1000
[227021] read(11, "\u0002±nvim_ui_set_focusìterm...", 4096) = 22
[227021] statx(4294967196, "/tmp/test", 0, 4095, "ÿ\u0002ªnvim_input¡ ocusìte...", 4096) = 16
[227021] write(12, "\u0002¦redrawÜ", 57) = 57
[227021] read(11, "\u0002ªnvim_input¡wocusìte...", 4096) = 16
[227021] mmap(0x7EC2B0BE1000, 131072, 3, 34, 4294967295, 0) = 0x7EC2B0BA1000
[227021] statx(4294967196, "/tmp/test", 0, 4095, "ÿ\u0002¦redrawÜ", 115) = 115
[227021] statx(4294967196, "/tmp/test", 0, 4095, "ÿ²Â~", 4095) = -22
[227021] statx(4294967196, "/home/gep/.local/state/nvim/undo...", 0, 4095, "ÿ\u0002¦redrawÜ", 109) = 109
[227021] read(21, "warning: Not a git repository. U...", 4096) = 1475
[227021] mprotect(0x7EC2A2F60000, 65536, 3) = 0
[227021] mprotect(0x7EC2A2F60000, 65536, 5) = 0
[227021] read(21, "generate diffstat with a given w...", 4096) = 4096
[227021] read(6, "*", 1) = 1
[227021] write(9, "(¾, 16) = 16
[227021] write(7, "*(¾, 1) = 1
thread 'main' panicked at /build/lurk-0.3.9-vendor.tar.gz/syscalls/src/arch/x86_64.rs:5:1:
invalid syscall: 4294967295
stack backtrace:
   0:     0x576036ba6f76 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h9754a6437f1de22a
   1:     0x576036bfa08b - core::fmt::write::hb706a393bb60a06f
   2:     0x576036baed19 - std::io::Write::write_fmt::h9b447dc5d824d0bd
   3:     0x576036bd8cc6 - std::panicking::default_hook::{{closure}}::h227952daede9dd84
   4:     0x576036bd8956 - std::panicking::default_hook::h31626ee1feb8ee2a
   5:     0x576036bd9221 - std::panicking::rust_panic_with_hook::h76d2aa694a00748e
   6:     0x576036ba77f7 - std::panicking::begin_panic_handler::{{closure}}::h8855a344ffa1638b
   7:     0x576036ba7189 - std::sys::backtrace::__rust_end_short_backtrace::h3110d0cbfbf26886
   8:     0x576036bd8e04 - rust_begin_unwind
   9:     0x576036a8bfc3 - core::panicking::panic_fmt::h3af706d0346c1c60
  10:     0x576036b50555 - <syscalls::arch::x86_64::Sysno as core::convert::From<u32>>::from::h11cbe6b055594b9d
  11:     0x576036a8f0a0 - lurk_cli::Tracer<W>::log_standard_syscall::h1e413ed6aa727906
  12:     0x576036a8d342 - lurk_cli::Tracer<W>::run_tracer::hef4e2d15ef1cdb38
  13:     0x576036a97e72 - lurk::main::h254ad2fa91dff1d6
  14:     0x576036aa1be3 - std::sys::backtrace::__rust_begin_short_backtrace::h12443bb163a31647
  15:     0x576036a9e87d - std::rt::lang_start::{{closure}}::he10191e4e51afed7
  16:     0x576036bdafb5 - std::rt::lang_start_internal::h2084fce485147f46
  17:     0x576036a97f75 - main
  18:     0x7c92ee4bb27e - __libc_start_call_main
  19:     0x7c92ee4bb339 - __libc_start_main_alias_2
  20:     0x576036a8c425 - _start
  21:                0x0 - <unknown>
strace output for the same thing
strace: Process 227021 attached
strace: Process 227021 attached
[], 1024, 39, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 4, NULL, 8)    = 0
[], 1024, 94, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 24, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 49, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 23, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 6, NULL, 8)    = 0
[], 1024, 93, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
read(11, read(11, "\223\2\261nvim_ui_set_focus\221\303", 4096) = 22
"\223\2\261nvim_ui_set_focus\221\303", 4096) = 22
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 71, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 5, NULL, 8)    = 0
[], 1024, 15, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 49, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 26, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 27, NULL, 8)   = 0
read(11, read(11, "\223\2\252nvim_input\221\241 ", 4096) = 16
"\223\2\252nvim_input\221\241 ", 4096) = 16
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
write(12, "\223\2\246redraw\334\0\2\334\0\2\251grid_line\225\0016\314\307\334\0"..., 57write(12, "\223\2\246redraw\334\0\2\334\0\2\251grid_line\225\0016\314\307\334\0"..., 57) = 57
) = 57
[], 1024, 0, NULL, 8)    = 0
read(11, read(11, "\223\2\252nvim_input\221\241w", 4096) = 16
"\223\2\252nvim_input\221\241w", 4096) = 16
[], 1024, 0, NULL, 8)    = 0
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
access("/tmp/test", W_OKaccess("/tmp/test", W_OK)               = 0
)               = 0
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
write(12, "\223\2\246redraw\334\0\4\334\0\3\251grid_line\225\0016\314\307\334\0"..., 115write(12, "\223\2\246redraw\334\0\4\334\0\3\251grid_line\225\0016\314\307\334\0"..., 115) = 115
) = 115
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
access("/tmp/test", W_OKaccess("/tmp/test", W_OK)               = 0
)               = 0
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
openat(AT_FDCWD, "/tmp/test", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0664openat(AT_FDCWD, "/tmp/test", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0664) = 16
) = 16
fsync(16fsync(16)                               = 0
)                               = 0
close(16close(16)                               = 0
)                               = 0
chmod("/tmp/test", 0100664chmod("/tmp/test", 0100664)             = 0
)             = 0
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
readlink("/tmp/test", readlink("/tmp/test", 0x7ffeecb52dd0, 4095) = -1 EINVAL (Invalid argument)
0x7ffeecb52dd0, 4095) = -1 EINVAL (Invalid argument)
statx(AT_FDCWD, "/home/gep/.local/state/nvim/undo", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/home/gep/.local/state/nvim/undo", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=204562, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFDIR|0755, stx_size=204562, ...}) = 0
statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp/test", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0664, stx_size=0, ...}) = 0
statx(AT_FDCWD, "/home/gep/.local/state/nvim/undo/%tmp%test", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/home/gep/.local/state/nvim/undo/%tmp%test", AT_STATX_SYNC_AS_STAT, STATX_ALL, 0x7ffeecb54bc0) = -1 ENOENT (No such file or directory)
0x7ffeecb54bc0) = -1 ENOENT (No such file or directory)
getcwd(getcwd("/home/gep", 4096)               = 10
"/home/gep", 4096)               = 10
readlink("/tmp", readlink("/tmp", 0x7ffeecb53fd0, 1023)  = -1 EINVAL (Invalid argument)
0x7ffeecb53fd0, 1023)  = -1 EINVAL (Invalid argument)
readlink("/tmp/test", readlink("/tmp/test", 0x7ffeecb53fd0, 1023) = -1 EINVAL (Invalid argument)
0x7ffeecb53fd0, 1023) = -1 EINVAL (Invalid argument)
statx(AT_FDCWD, "/tmp", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/tmp", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFDIR|S_ISVTX|0777, stx_size=77090, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFDIR|S_ISVTX|0777, stx_size=77090, ...}) = 0
readlink("/tmp", readlink("/tmp", 0x7ffeecb54020, 1023)  = -1 EINVAL (Invalid argument)
0x7ffeecb54020, 1023)  = -1 EINVAL (Invalid argument)
readlink("/tmp/test", readlink("/tmp/test", 0x7ffeecb54020, 1023) = -1 EINVAL (Invalid argument)
0x7ffeecb54020, 1023) = -1 EINVAL (Invalid argument)
statx(AT_FDCWD, "/run/wrappers/bin/git", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/run/wrappers/bin/git", AT_STATX_SYNC_AS_STAT, STATX_ALL, 0x7ffeecb53600) = -1 ENOENT (No such file or directory)
0x7ffeecb53600) = -1 ENOENT (No such file or directory)
statx(AT_FDCWD, "/home/gep/.nix-profile/bin/git", AT_STATX_SYNC_AS_STAT, STATX_ALL, statx(AT_FDCWD, "/home/gep/.nix-profile/bin/git", AT_STATX_SYNC_AS_STAT, STATX_ALL, {stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0555, stx_size=4299160, ...}) = 0
{stx_mask=STATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx_attributes=0, stx_mode=S_IFREG|0555, stx_size=4299160, ...}) = 0
access("/home/gep/.nix-profile/bin/git", X_OKaccess("/home/gep/.nix-profile/bin/git", X_OK) = 0
) = 0
socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, [16, 17]) = 0
socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, [16, 17]) = 0
socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, [18, 20]) = 0
[18, 20]) = 0
socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, [21, 23]) = 0
pipe2([21, 23]) = 0
pipe2([25, 26], O_CLOEXEC)              = 0
[25, 26], O_CLOEXEC)              = 0
rt_sigprocmask(SIG_BLOCK, ~[ILL TRAP ABRT BUS KILL SEGV STOP SYS RTMIN RT_1], rt_sigprocmask(SIG_BLOCK, ~[ILL TRAP ABRT BUS KILL SEGV STOP SYS RTMIN RT_1], [], 8) = 0
[], 8) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLDclone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ec2b24e8a10) = 228410
, child_tidptr=0x7ec2b24e8a10) = 228410
rt_sigprocmask(SIG_SETMASK, [], rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
NULL, 8) = 0
close(26close(26)                               = 0
)                               = 0
read(25, read(25, "", 4)                         = 0
"", 4)                         = 0
close(25close(25)                               = 0
)                               = 0
close(17close(17)                               = 0
)                               = 0
ioctl(16, FIONBIO, [1]ioctl(16, FIONBIO, [1])                 = 0
)                 = 0
close(20close(20)                               = 0
)                               = 0
ioctl(18, FIONBIO, [1]ioctl(18, FIONBIO, [1])                 = 0
)                 = 0
close(23close(23)                               = 0
)                               = 0
ioctl(21, FIONBIO, [1]ioctl(21, FIONBIO, [1])                 = 0
)                 = 0
io_uring_enter(5, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0io_uring_enter(5, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0) = 2
) = 2
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
write(12, "\223\2\246redraw\334\0\3\334\0\2\251grid_line\225\0016\f\334\0\r"..., 109write(12, "\223\2\246redraw\334\0\3\334\0\2\251grid_line\225\0016\f\334\0\r"..., 109) = 109
) = 109
read(21, read(21, "warning: Not a git repository. U"..., 4096) = 2881
"warning: Not a git repository. U"..., 4096) = 2881
read(21, read(21, "\n    --output-indicator-new <cha"..., 4096) = 1324
"\n    --output-indicator-new <cha"..., 4096) = 1324
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_WRITE) = 0
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_WRITE) = 0
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_EXECmprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_EXEC) = 0
) = 0
read(21, read(21, ", --ignore-space-change\n        "..., 4096) = 2591
", --ignore-space-change\n        "..., 4096) = 2591
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_WRITEmprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_WRITE) = 0
) = 0
mprotect(0x7ec2a2f60000, 65536, PROT_READ|PROT_WRITEmprotect(0x7ec2a2f60000, 65536, PROT_READ|PROT_WRITE) = 0
) = 0
mprotect(0x7ec2a2f60000, 65536, PROT_READ|PROT_EXECmprotect(0x7ec2a2f60000, 65536, PROT_READ|PROT_EXEC) = 0
) = 0
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_EXECmprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_EXEC) = 0
) = 0
socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, [17, 20]) = 0
[17, 20]) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=228410, si_uid=1000, si_status=129, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=228410, si_uid=1000, si_status=129, si_utime=0, si_stime=0} ---
read(6, read(6, "*", 1)                         = 1
"*", 1)                         = 1
write(9, "(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 16write(9, "(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 16) = 16
) = 16
write(7, "*", 1write(7, "*", 1)                        = 1
)                        = 1
rt_sigreturn({mask=[]}rt_sigreturn({mask=[]})                 = 0
)                 = 0
socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, [23, 25]) = 0
[23, 25]) = 0
pipe2(pipe2([26, 27], O_CLOEXEC)              = 0
[26, 27], O_CLOEXEC)              = 0
rt_sigprocmask(SIG_BLOCK, ~[ILL TRAP ABRT BUS KILL SEGV STOP SYS RTMIN RT_1], rt_sigprocmask(SIG_BLOCK, ~[ILL TRAP ABRT BUS KILL SEGV STOP SYS RTMIN RT_1], [], 8) = 0
[], 8) = 0
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLDclone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7ec2b24e8a10) = 228411
, child_tidptr=0x7ec2b24e8a10) = 228411
rt_sigprocmask(SIG_SETMASK, [], rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
NULL, 8) = 0
close(27)                               = 0
close(27)                               = 0
read(26, read(26, "", 4)                         = 0
"", 4)                         = 0
close(26close(26)                               = 0
)                               = 0
close(20close(20)                               = 0
)                               = 0
ioctl(17, FIONBIO, [1]ioctl(17, FIONBIO, [1])                 = 0
)                 = 0
close(25close(25)                               = 0
)                               = 0
ioctl(23, FIONBIO, [1]ioctl(23, FIONBIO, [1])                 = 0
)                 = 0
io_uring_enter(5, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0io_uring_enter(5, 2, 2, IORING_ENTER_GETEVENTS, NULL, 0) = 2
) = 2
read(21, read(21, "       treat <string> in -S as e"..., 4096) = 569
"       treat <string> in -S as e"..., 4096) = 569
read(18, read(18, "", 4096)                      = 0
"", 4096)                      = 0
read(8, read(8, "(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 512) = 16
"(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 512) = 16
wait4(227030, wait4(227030, 0x7ffeecb521ec, WNOHANG, NULL) = 0
0x7ffeecb521ec, WNOHANG, NULL) = 0
wait4(228410, wait4(228410, [{WIFEXITED(s) && WEXITSTATUS(s) == 129}], WNOHANG, NULL) = 228410
[{WIFEXITED(s) && WEXITSTATUS(s) == 129}], WNOHANG, NULL) = 228410
wait4(228411, wait4(228411, 0x7ffeecb521ec, WNOHANG, NULL) = 0
0x7ffeecb521ec, WNOHANG, NULL) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=228411, si_uid=1000, si_status=128, si_utime=0, si_stime=0} ---
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=228411, si_uid=1000, si_status=128, si_utime=0, si_stime=0} ---
read(6, read(6, "*", 1)                         = 1
"*", 1)                         = 1
write(9, "(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 16write(9, "(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 16) = 16
) = 16
write(7, "*", 1write(7, "*", 1)                        = 1
)                        = 1
rt_sigreturn({mask=[]}rt_sigreturn({mask=[]})                 = 139374682446672
)                 = 139374682446672
read(23, read(23, "fatal: not a git repository (or "..., 65536) = 139
"fatal: not a git repository (or "..., 65536) = 139
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_WRITEmprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_WRITE) = 0
) = 0
mprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_EXECmprotect(0x7ec2a2f50000, 65536, PROT_READ|PROT_EXEC) = 0
) = 0
close(23close(23)                               = 0
)                               = 0
read(17, read(17, "", 65536)                     = 0
"", 65536)                     = 0
close(17close(17)                               = 0
)                               = 0
read(8, read(8, "(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 512) = 16
"(\276\232\0\0\0\0\0\21\0\0\0\0\0\0\0", 512) = 16
wait4(227030, wait4(227030, 0x7ffeecb521ec, WNOHANG, NULL) = 0
0x7ffeecb521ec, WNOHANG, NULL) = 0
wait4(228411, wait4(228411, [{WIFEXITED(s) && WEXITSTATUS(s) == 128}], WNOHANG, NULL) = 228411
[{WIFEXITED(s) && WEXITSTATUS(s) == 128}], WNOHANG, NULL) = 228411
io_uring_enter(5, 4, 4, IORING_ENTER_GETEVENTS, NULL, 0io_uring_enter(5, 4, 4, IORING_ENTER_GETEVENTS, NULL, 0) = 4
) = 4
getsockopt(18, SOL_SOCKET, SO_RCVBUF, getsockopt(18, SOL_SOCKET, SO_RCVBUF, [212992], [4]) = 0
[212992], [4]) = 0
[], 1024, 0, NULL, 8)    = 0
getsockopt(21, SOL_SOCKET, SO_RCVBUF, getsockopt(21, SOL_SOCKET, SO_RCVBUF, [212992], [4]) = 0
[212992], [4]) = 0
[], 1024, 0, NULL, 8)    = 0
) = -1 ENOENT (No such file or directory)
close(16close(16)                               = 0
)                               = 0
) = -1 ENOENT (No such file or directory)
close(18close(18)                               = 0
)                               = 0
) = -1 ENOENT (No such file or directory)
close(21close(21)                               = 0
)                               = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 53, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 18, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 48, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 29, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 98, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 54, NULL, 8)   = 0
[], 1024, 44, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 100, NULL, 8)  = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 15, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 48, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 33, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 5, NULL, 8)    = 0
[], 1024, 93, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
read(11, "\223\2\261nvim_ui_set_focus\221\302", 4096) = 22
read(11, "\223\2\261nvim_ui_set_focus\221\302", 4096) = 22
[], 1024, 0, NULL, 8)    = 0
[], 1024, 61, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 99, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 98, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 6, NULL, 8)    = 0
[], 1024, 5, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 48, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 36, NULL, 8)   = 0
[], 1024, 0, NULL, 8)    = 0
[], 1024, 0, NULL, 8)    = 0
 <detached ...>
strace: Process 227021 detached
 <detached ...>

The orig_rax register has max value (0xFFFFFFFFFFFFFFFF) when the crash happens, maybe the program tries to log a non-syscall?

As a workaround I'll be using this patch, let me know if I should get make a minimal reproducible example so you can properly fix it :)

diff --git a/src/lib.rs b/src/lib.rs
index 439acbb..d7a39f0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -69,7 +69,7 @@ pub mod args;
 pub mod style;
 pub mod syscall_info;
 
-use anyhow::{anyhow, Result};
+use anyhow::{anyhow, bail, Result};
 use comfy_table::modifiers::UTF8_ROUND_CORNERS;
 use comfy_table::presets::UTF8_BORDERS_ONLY;
 use comfy_table::CellAlignment::Right;
@@ -368,7 +368,12 @@ impl<W: Write> Tracer<W> {
         syscall_start_time: Option<SystemTime>,
         syscall_end_time: Option<SystemTime>,
     ) -> Result<()> {
-        let (syscall_number, registers) = self.parse_register_data(pid)?;
+        let register_data = self.parse_register_data(pid);
+        if let Err(e) = register_data {
+            eprintln!("{e}");
+            return Ok(());
+        }
+        let (syscall_number, registers) = register_data.unwrap();
 
         // Theres no PTRACE_SYSCALL_INFO_EXIT for an exit-family syscall, hence ret_code will always be 0xffffffffffffffda (which is -38)
         // -38 is ENOSYS which is put into RAX as a default return value by the kernel's syscall entry code.
@@ -438,6 +443,9 @@ impl<W: Write> Tracer<W> {
     fn get_syscall(&self, registers: user_regs_struct) -> Result<Sysno> {
         #[cfg(target_arch = "x86_64")]
         let reg = registers.orig_rax;
+        if reg == u64::max_value() {
+            bail!("Invalid syscall number {}", reg);
+        }
         #[cfg(target_arch = "riscv64")]
         let reg = registers.a7;
         #[cfg(target_arch = "aarch64")]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants