mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
thread-mainloop: keep SIGSYS unblocked if currently trapped
Seccomp-BPF uses SIGSYS signal to trigger the trap handler attached to sys_open. If the signal is blocked then the kernel kills the process whenever pulse audio calls 'open'. The result backtrace is terminating in sys_open. That's why it is required to keep SIGSYS unblocked if it is currently unblocked and trapped. This patch allows to have pulse audio working in the Chromium sandbox. Signed-off-by: Julien Isorce <j.isorce@samsung.com> Signed-off-by: Arun Raghavan <git@arunraghavan.net>
This commit is contained in:
parent
c25b06577c
commit
9817f396d5
1 changed files with 14 additions and 2 deletions
|
|
@ -77,10 +77,22 @@ static void thread(void *userdata) {
|
|||
|
||||
#ifndef OS_IS_WIN32
|
||||
sigset_t mask;
|
||||
sigset_t prev_mask;
|
||||
struct sigaction sa;
|
||||
|
||||
/* Make sure that signals are delivered to the main thread */
|
||||
sigfillset(&mask);
|
||||
pthread_sigmask(SIG_BLOCK, &mask, NULL);
|
||||
|
||||
/* If SIGSYS is currently unblocked and trapped then keep it unblocked. */
|
||||
if (!pthread_sigmask(SIG_SETMASK, NULL, &prev_mask) &&
|
||||
!sigismember(&prev_mask, SIGSYS) &&
|
||||
!sigaction(SIGSYS, NULL, &sa)
|
||||
&& sa.sa_handler != SIG_DFL) {
|
||||
sigdelset(&mask, SIGSYS);
|
||||
}
|
||||
|
||||
/* Make sure that signals are delivered to the main thread.
|
||||
* Use SIG_SETMASK because SIG_BLOCK does an union with current set.*/
|
||||
pthread_sigmask(SIG_SETMASK, &mask, NULL);
|
||||
#endif
|
||||
|
||||
pa_mutex_lock(m->mutex);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue