boltd: segfault on Linux 5.13
Related to #173 (closed), right now running boltd on kernel 5.13 results in the following crash:
[New Thread 0x7ffff74fc640 (LWP 25646)]
11:28:44 bolt 0.9.1 starting up.
[New Thread 0x7ffff6a13640 (LWP 25647)]
[New Thread 0x7ffff6212640 (LWP 25648)]
11:28:44 manager: initializing store
11:28:44 store: located at: /var/lib/boltd
11:28:44 config: loading user config
11:28:44 bouncer: initializing polkit
11:28:44 udev: initializing udev
11:28:44 store: loading domains
11:28:44 [d5010000-0090-domain? ] store: loading domain
11:28:44 journal: opened for 'd5010000-0090'; size: 0 bytes
11:28:44 [d5010000-0090-domain? ] domain: registered (bootacl: 14/16)
11:28:44 store: loading devices
11:28:44 [d5010000-0090 ] store: loading device
11:28:44 global 'generation' set to '3'
11:28:44 [00b49960-9371 ] store: loading device
11:28:44 [00053a11-6f26 ] store: loading device
11:28:44 power: state located at: /run/boltd/power
11:28:44 power: force power support: yes
11:28:44 power: recovered state, on: yes, guards: 0
11:28:44 power: creating temporary power guard
11:28:44 power: setting force_power to ON
11:28:44 power: guard '1' for 'boltd' active
11:28:44 power: guard '1' for 'boltd' deactivated
11:28:44 power: shutdown scheduled (T-20.00s)
11:28:44 udev: found 1 domain
11:28:44 udev: enumerating devices
11:28:44 probing: adding /sys/devices/pci0000:00/0000:00:1b.0/0000:02:00.0 to roots
11:28:44 [d5010000-0090-domain0 ] bootacl: synchronizing journal
11:28:44 security level set to 'secure'
11:28:44 [d5010000-0090-domain0 ] connected: as domain0 [secure] (/sys/devices/pci0000:00/0000:00:1b.0/0000:02:00.0/0000:03:00.0/0000:04:00.0/domain0)
11:28:44 [d5010000-0090-XPS 15 9570 ] udev: failed to get device info: could not read 'authorized': No such file or directory
Thread 1 "boltd" received signal SIGSEGV, Segmentation fault.
0x00007ffff7b9d547 in __strlen_avx2 () from /usr/lib/libc.so.6
(gdb) bt
#0 0x00007ffff7b9d547 in __strlen_avx2 () at /usr/lib/libc.so.6
#1 0x00007ffff7ed8495 in g_strdup () at /usr/lib/libglib-2.0.so.0
#2 0x00007ffff7c81e5e in () at /usr/lib/libgobject-2.0.so.0
#3 0x00007ffff7c7306c in g_object_set_valist () at /usr/lib/libgobject-2.0.so.0
#4 0x00007ffff7c73355 in g_object_set () at /usr/lib/libgobject-2.0.so.0
#5 0x0000555555561386 in bolt_device_connected (udev=<optimized out>, domain=<optimized out>, dev=0x5555555e7040) at ../bolt-0.9.1/boltd/bolt-device.c:1330
#6 handle_udev_device_attached (udev=<optimized out>, dev=0x5555555e7040, domain=<optimized out>, mgr=<optimized out>) at ../bolt-0.9.1/boltd/bolt-manager.c:1971
#7 handle_udev_device_event (mgr=<optimized out>, device=<optimized out>, action=<optimized out>) at ../bolt-0.9.1/boltd/bolt-manager.c:1845
#8 0x0000555555568322 in bolt_manager_initialize (initable=<optimized out>, cancellable=<optimized out>, error=<optimized out>) at ../bolt-0.9.1/boltd/bolt-manager.c:579
#9 0x00007ffff7d18de1 in g_initable_new_valist () at /usr/lib/libgio-2.0.so.0
#10 0x00007ffff7d18e9a in g_initable_new () at /usr/lib/libgio-2.0.so.0
#11 0x000055555555d30c in on_bus_acquired (connection=0x5555555b9070, name=<optimized out>, user_data=<optimized out>) at ../bolt-0.9.1/boltd/bolt-daemon.c:136
#12 0x00007ffff7daaac5 in () at /usr/lib/libgio-2.0.so.0
#13 0x00007ffff7d4a934 in () at /usr/lib/libgio-2.0.so.0
#14 0x00007ffff7d4e629 in () at /usr/lib/libgio-2.0.so.0
#15 0x00007ffff7da7903 in () at /usr/lib/libgio-2.0.so.0
#16 0x00007ffff7d4a934 in () at /usr/lib/libgio-2.0.so.0
#17 0x00007ffff7d4a969 in () at /usr/lib/libgio-2.0.so.0
#18 0x00007ffff7ebb015 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#19 0x00007ffff7f0eb99 in () at /usr/lib/libglib-2.0.so.0
#20 0x00007ffff7eba693 in g_main_loop_run () at /usr/lib/libglib-2.0.so.0
#21 0x000055555555c46a in main (argc=<optimized out>, argv=<optimized out>) at ../bolt-0.9.1/boltd/bolt-daemon.c:256
With strace
it looks like:
getpeername(2, 0x7ffd6a46a430, [128]) = -1 ENOTSOCK (Socket operation on non-socket)
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(2, "\33[0;1;30m11:48:11\33[0m ", 2211:48:11 ) = 22
write(2, "[\33[0;34md5010000-0090-domain0 "..., 45[d5010000-0090-domain0 ] ) = 45
write(2, "\33[0mconnected: as domain0 [secur"..., 124connected: as domain0 [secure] (/sys/devices/pci0000:00/0000:00:1b.0/0000:02:00.0/0000:03:00.0/0000:04:00.0/domain0)) = 124
write(2, "\n", 1
) = 1
newfstatat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:1b.0/0000:02:00.0/0000:03:00.0/0000:04:00.0/domain0/0-0/authorized", 0x7ffd6a46ac50, AT_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
futex(0x7fcd97a3e068, FUTEX_WAKE_PRIVATE, 2147483647) = 0
getpeername(2, 0x7ffd6a46a420, [128]) = -1 ENOTSOCK (Socket operation on non-socket)
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(2, "\33[0;1;30m11:48:11\33[0m ", 2211:48:11 ) = 22
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(2, "[\33[0;34md5010000-0090-XPS 15 957"..., 45[d5010000-0090-XPS 15 9570 ] ) = 45
write(2, "\33[0;34mudev\33[0;33m: ", 20udev: ) = 20
write(2, "\33[0;33mfailed to get device info"..., 36failed to get device info) = 36
ioctl(2, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(2, ": \33[0;33mcould not read 'authori"..., 67: could not read 'authorized': No such file or directory) = 67
write(2, "\n", 1
) = 1
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x20} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault
This is caused by https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6f3badead6a078cf3c71f381f9d84ac922984a00.