seccomp: don't kill process for resource control syscalls
commit576964bf2a3fe60253b5704f1b9f0da2d31b3c00
authorDaniel P. Berrangé <berrange@redhat.com>
Wed, 13 Mar 2019 09:49:03 +0000 (13 09:49 +0000)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Tue, 30 Jul 2019 20:15:46 +0000 (30 15:15 -0500)
treeb726b5ab3232771d57915fa3332c1f7f8c4cd6b3
parent4c7f4c4bbb515c5772fc15fc2192604ca7a0d197
seccomp: don't kill process for resource control syscalls

The Mesa library tries to set process affinity on some of its threads in
order to optimize its performance. Currently this results in QEMU being
immediately terminated when seccomp is enabled.

Mesa doesn't consider failure of the process affinity settings to be
fatal to its operation, but our seccomp policy gives it no choice in
gracefully handling this denial.

It is reasonable to consider that malicious code using the resource
control syscalls to be a less serious attack than if they were trying
to spawn processes or change UIDs and other such things. Generally
speaking changing the resource control setting will "merely" affect
quality of service of processes on the host. With this in mind, rather
than kill the process, we can relax the policy for these syscalls to
return the EPERM errno value. This allows callers to detect that QEMU
does not want them to change resource allocations, and apply some
reasonable fallback logic.

The main downside to this is for code which uses these syscalls but does
not check the return value, blindly assuming they will always
succeeed. Returning an errno could result in sub-optimal behaviour.
Arguably though such code is already broken & needs fixing regardless.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
(cherry picked from commit 9a1565a03b79d80b236bc7cc2dbce52a2ef3a1b8)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
qemu-seccomp.c