]> git.proxmox.com Git - mirror_qemu.git/commitdiff
seccomp: use SIGSYS signal instead of killing the thread
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Wed, 22 Aug 2018 17:02:47 +0000 (19:02 +0200)
committerEduardo Otubo <otubo@redhat.com>
Thu, 23 Aug 2018 14:45:20 +0000 (16:45 +0200)
The seccomp action SCMP_ACT_KILL results in immediate termination of
the thread that made the bad system call. However, qemu being
multi-threaded, it keeps running. There is no easy way for parent
process / management layer (libvirt) to know about that situation.

Instead, the default SIGSYS handler when invoked with SCMP_ACT_TRAP
will terminate the program and core dump.

This may not be the most secure solution, but probably better than
just killing the offending thread. SCMP_ACT_KILL_PROCESS has been
added in Linux 4.14 to improve the situation, which I propose to use
by default if available in the next patch.

Related to:
https://bugzilla.redhat.com/show_bug.cgi?id=1594456

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Acked-by: Eduardo Otubo <otubo@redhat.com>
qemu-seccomp.c

index 9cd8eb949989e67d4cc4e495d611de95df98a162..b117a925595ccecd65f0a7b26ab9dc4e35a41e19 100644 (file)
@@ -125,7 +125,7 @@ static int seccomp_start(uint32_t seccomp_opts)
             continue;
         }
 
-        rc = seccomp_rule_add_array(ctx, SCMP_ACT_KILL, blacklist[i].num,
+        rc = seccomp_rule_add_array(ctx, SCMP_ACT_TRAP, blacklist[i].num,
                                     blacklist[i].narg, blacklist[i].arg_cmp);
         if (rc < 0) {
             goto seccomp_return;