Pulseaudio segfaults immediately after launch

Hi,

I’m attempting to run Pulseaudio on my Turris Omnia, but unfortunately it segfaults as soon as it starts. This is happening with the newest pulseaudio-daemon and pulseaudio-daemon-avahi on TurrisOS 5.1.4.

I’ve tried running it with strace to see if I could glean anything useful, but unfortunately not.
Perhaps someone has some ideas?

Linux turris 4.14.206 #0 SMP Fri Nov 13 04:11:07 2020 armv7l GNU/Linux

The trace is:

root@turris:~# strace pulseaudio
execve("/usr/bin/pulseaudio", ["pulseaudio"], 0xbe9addd0 /* 13 vars */) = 0
set_tls(0xb6feb5d8)                     = 0
set_tid_address(0xb6fec1b0)             = 13586
open("/usr/lib/pulseaudio/libpulsecore-12.2.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=499947, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0@\376\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 569344, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6edd000
mmap2(0xb6f65000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x78000) = 0xb6f65000
close(3)                                = 0
open("/usr/lib/pulseaudio/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld-musl-armhf.path", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libpulse.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=278540, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0 \242\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 348160, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6e88000
mmap2(0xb6edb000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x43000) = 0xb6edb000
close(3)                                = 0
open("/usr/lib/pulseaudio/libpulsecommon-12.2.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=409747, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\08\370\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 479232, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6e13000
mmap2(0xb6e86000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x63000) = 0xb6e86000
close(3)                                = 0
open("/usr/lib/pulseaudio/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libwrap.so.0", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=21543, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\244\34\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 90112, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6dfd000
mmap2(0xb6e11000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4000) = 0xb6e11000
close(3)                                = 0
open("/usr/lib/pulseaudio/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libsndfile.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=361156, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\370&\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 438272, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d92000
mmap2(0xb6df9000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x57000) = 0xb6df9000
mmap2(0xb6dfb000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6dfb000
close(3)                                = 0
open("/usr/lib/pulseaudio/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libltdl.so.7", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0755, st_size=28681, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0P\32\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 98304, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d7a000
mmap2(0xb6d90000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x6000) = 0xb6d90000
close(3)                                = 0
open("/usr/lib/pulseaudio/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libcap.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=12442, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\230\16\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 81920, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d66000
mmap2(0xb6d78000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x2000) = 0xb6d78000
close(3)                                = 0
open("/usr/lib/pulseaudio/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=40963, ...}) = 0
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0000E\0\0004\0\0\0"..., 936) = 936
mmap2(NULL, 110592, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xb6d4b000
mmap2(0xb6d64000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x9000) = 0xb6d64000
close(3)                                = 0
mprotect(0xb6f65000, 8192, PROT_READ)   = 0
mprotect(0xb6edb000, 4096, PROT_READ)   = 0
mprotect(0xb6e86000, 4096, PROT_READ)   = 0
mprotect(0xb6e11000, 4096, PROT_READ)   = 0
mprotect(0xb6df9000, 4096, PROT_READ)   = 0
mprotect(0xb6d90000, 4096, PROT_READ)   = 0
mprotect(0xb6d78000, 4096, PROT_READ)   = 0
mprotect(0xb6d64000, 4096, PROT_READ)   = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x44e250} ---
+++ killed by SIGSEGV +++
Segmentation fault

Two possibilities:

NEON optimizations are enabled and being miscompiled because of the architecture.

Bad toolchain is used. arm_cortex-a9_vfpv3 turned to arm_cortex-a9_vfpv3-d16 to fix such a thing.

I would update TurrisOS to one of the testing branches first to see if that fixes it.

@paja Can you take a look at this issue? It seems to be still happening, according to the discussion on IRC channel. I am also fine if you said that we would not take a look as this package comes from packages feed and we are not maintainers of it, and we can report it to upstream though and in the meantime, wait for OpenWrt 21.02

1 Like

Yep, I had mentioned this on IRC. My strace matches up with the one above.

I’ve just tried pulseaudio and in works in HBD branch (based on not-yet-released OpenWrt 21.02).

Guys, I have good news for you!

I backported changes from the OpenWrt master branch to OpenWrt 19.07, including an update of PulseAudio to version 14.0, which does not segfault anymore.

This is going to be part of the upcoming RC2 of Turris OS 5.2. You can already find it in HBK-HBL branches.

1 Like

I can confirm I could indeed use PulseAudio with 5.2!