diff --git a/security/sandbox/linux/SandboxFilter.cpp b/security/sandbox/linux/SandboxFilter.cpp --- a/security/sandbox/linux/SandboxFilter.cpp +++ b/security/sandbox/linux/SandboxFilter.cpp @@ -1759,16 +1759,24 @@ return Allow(); case __NR_sched_get_priority_min: case __NR_sched_get_priority_max: return Allow(); case __NR_sched_getparam: - case __NR_sched_getscheduler: - case __NR_sched_setscheduler: { +#if defined(LIBC_GLIBC) + case __NR_sched_setscheduler: +#endif + case __NR_sched_getscheduler: { Arg pid(0); return If(pid == 0, Allow()).Else(Trap(SchedTrap, nullptr)); } +#if !defined(LIBC_GLIBC) + // For pthread_create(3) on musl; bug 1657849. + case __NR_sched_setscheduler: + return Allow(); +#endif + // For clock(3) on older glibcs; bug 1304220. case __NR_times: return Allow(); // Bug 1372428 @@ -1950,17 +1958,25 @@ case __NR_sched_getaffinity: case __NR_sched_setaffinity: case __NR_sched_getparam: case __NR_sched_setparam: case __NR_sched_getscheduler: +#if defined(LIBC_GLIBC) case __NR_sched_setscheduler: +#endif case __NR_sched_getattr: case __NR_sched_setattr: { Arg pid(0); return If(pid == 0, Allow()).Else(Trap(SchedTrap, nullptr)); } +#if !defined(LIBC_GLIBC) + // For pthread_create(3) on musl; bug 1657849. + case __NR_sched_setscheduler: + return Allow(); +#endif + // The priority bounds are also used, sometimes (bug 1838675): case __NR_sched_get_priority_min: case __NR_sched_get_priority_max: return Allow();