mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-02 09:01:46 -05: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
|
#ifndef OS_IS_WIN32
|
||||||
sigset_t mask;
|
sigset_t mask;
|
||||||
|
sigset_t prev_mask;
|
||||||
|
struct sigaction sa;
|
||||||
|
|
||||||
/* Make sure that signals are delivered to the main thread */
|
|
||||||
sigfillset(&mask);
|
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
|
#endif
|
||||||
|
|
||||||
pa_mutex_lock(m->mutex);
|
pa_mutex_lock(m->mutex);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue