From nobody Mon Feb 9 17:08:14 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1489491329101476.9439727477877; Tue, 14 Mar 2017 04:35:29 -0700 (PDT) Received: from localhost ([::1]:57872 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cnkje-0002Gs-3h for importer@patchew.org; Tue, 14 Mar 2017 07:35:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53019) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cnkgb-0000iU-Gf for qemu-devel@nongnu.org; Tue, 14 Mar 2017 07:32:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cnkga-00088N-2F for qemu-devel@nongnu.org; Tue, 14 Mar 2017 07:32:17 -0400 Received: from mail-wm0-x22f.google.com ([2a00:1450:400c:c09::22f]:37822) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cnkgZ-000873-SM for qemu-devel@nongnu.org; Tue, 14 Mar 2017 07:32:15 -0400 Received: by mail-wm0-x22f.google.com with SMTP id n11so61327877wma.0 for ; Tue, 14 Mar 2017 04:32:15 -0700 (PDT) Received: from vader.pb.local ([62.217.45.26]) by smtp.gmail.com with ESMTPSA id n59sm28846267wrb.54.2017.03.14.04.32.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 14 Mar 2017 04:32:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=profitbricks-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iJ5AmwIxu5nb9t8OSY6QVm80f4XIhI3rOSl9KQ8tKVI=; b=YWxCOLa+OZIBGWYj4pAzDfk/Z0IYY9inQk8rK0Iry3M/6se2YUU5g+dT0toLCw7WRJ R8sQrnN0HX7T3I+xQStY1q0uvAkTAp9+Dhg+kEdVQm/Y5NmxyAighoTuuVEpzGtwdcli q4lJqJ2w6dm3uoFJ0p1Sohq3z+qhEy1eq4gm5KhZXt69ojWiAoWRUPL4uYhYm5CABqyn hnX9DOLfIXExgae4vT0v1JiotrYjdbViKzANAh7mxT5qssOWedpksYk1PG91nOeUtE36 FH7SdBZfIJYcDP3RUVeLptmscWeNYVm7PmTYPum4XRw19aNM4iKMLo9vRQXwuM0ZFF9A 9yKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iJ5AmwIxu5nb9t8OSY6QVm80f4XIhI3rOSl9KQ8tKVI=; b=bnEC+ggwsCoFfNTISATZqW9RQ1TOrGKNhnACCHa+OA+qJLTeDBwNQny/LgSyVHyQUq 6xgwWkxquEAdh2SPaqI8FGJGWgiIzgTzu5naPIsIfrRFMzpr4rJcLtz5CLGk9pdcw2ti BTrg3J5NahaK6p5EnzriZEO0ET7Tp764O3tRMI7R1arKoJV2MAa/3RBVzW6VDSaog820 BcEyXJNtWJWDBz1V28YvAUEub+3ZSsLJu51pRjQkBHcn8xuYzdwg2Ni43Kr//wzpHmQ7 OZvCITEuDvTq5cMHZCmgZEJtjYD5WTe9lb2eMBylaSZD4vKJ3ms86L4Q68FnDcyQqVje X9Fw== X-Gm-Message-State: AFeK/H3tlHfrWrvP8MdQwUwSCxRQ5MaIVa3oSaNgc7NTZupXUbd3wDFAlFFK2eipU0urUnQn X-Received: by 10.28.111.3 with SMTP id k3mr14072629wmc.39.1489491134791; Tue, 14 Mar 2017 04:32:14 -0700 (PDT) From: Eduardo Otubo To: qemu-devel@nongnu.org Date: Tue, 14 Mar 2017 12:32:09 +0100 Message-Id: <20170314113209.12025-6-eduardo.otubo@profitbricks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170314113209.12025-1-eduardo.otubo@profitbricks.com> References: <20170314113209.12025-1-eduardo.otubo@profitbricks.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::22f Subject: [Qemu-devel] [PATCH 5/5] seccomp: add resourcecontrol argument to command line X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thuth@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch adds [,resourcecontrol=3Ddeny] to `-sandbox on' option. It blacklists all process affinity and scheduler priority system calls to avoid any bigger of the process. Signed-off-by: Eduardo Otubo --- include/sysemu/seccomp.h | 1 + qemu-options.hx | 5 ++++- qemu-seccomp.c | 26 ++++++++++++++++++++++++++ vl.c | 11 +++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/include/sysemu/seccomp.h b/include/sysemu/seccomp.h index f1614d6514..c7003dd197 100644 --- a/include/sysemu/seccomp.h +++ b/include/sysemu/seccomp.h @@ -18,6 +18,7 @@ #define OBSOLETE 0x0001 #define PRIVILEGED 0x0010 #define SPAWN 0x0100 +#define RESOURCECTL 0x1000 =20 #include =20 diff --git a/qemu-options.hx b/qemu-options.hx index 53f4f8cfd2..5784ffe4b1 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -3732,11 +3732,12 @@ Old param mode (ARM only). ETEXI =20 DEF("sandbox", HAS_ARG, QEMU_OPTION_sandbox, \ - "-sandbox on[,obsolete=3Dallow][,elevateprivileges=3Ddeny][,spawn=3Dde= ny]" \ + "-sandbox on[,obsolete=3Dallow][,elevateprivileges=3Ddeny][,spawn=3Dde= ny][,resourcecontrol=3Ddeny]\n" \ " Enable seccomp mode 2 system call filt= er (default 'off').\n" \ " obsolete: Allow obsolete system calls\= n" \ " elevateprivileges: avoids Qemu process= to elevate its privileges by blacklisting all set*uid|gid system calls\n" \ " spawn: avoids Qemu to spawn new thread= s or processes by blacklisting *fork and execve\n" + " resourcecontrol: disable process affin= ity and schedular priority\n", QEMU_ARCH_ALL) STEXI @item -sandbox @var{arg}[,obsolete=3D@var{string}] @@ -3750,6 +3751,8 @@ Enable Obsolete system calls Disable set*uid|gid systema calls @item spawn=3D@var{string} Disable *fork and execve +@item resourcecontrol=3D@var{string} +Disable process affinity and schedular priority @end table ETEXI =20 diff --git a/qemu-seccomp.c b/qemu-seccomp.c index 4c1f7b41ba..dec47e9a74 100644 --- a/qemu-seccomp.c +++ b/qemu-seccomp.c @@ -31,6 +31,19 @@ struct QemuSeccompSyscall { uint8_t priority; }; =20 +static const struct QemuSeccompSyscall resourcecontrol_syscalls[] =3D { + { SCMP_SYS(getpriority), 255 }, + { SCMP_SYS(setpriority), 255 }, + { SCMP_SYS(sched_setparam), 255 }, + { SCMP_SYS(sched_getparam), 255 }, + { SCMP_SYS(sched_setscheduler), 255 }, + { SCMP_SYS(sched_getscheduler), 255 }, + { SCMP_SYS(sched_setaffinity), 255 }, + { SCMP_SYS(sched_getaffinity), 255 }, + { SCMP_SYS(sched_get_priority_max), 255 }, + { SCMP_SYS(sched_get_priority_min), 255 }, +}; + static const struct QemuSeccompSyscall spawn_syscalls[] =3D { { SCMP_SYS(fork), 255 }, { SCMP_SYS(vfork), 255 }, @@ -171,6 +184,19 @@ int seccomp_start(uint8_t seccomp_opts) } } =20 + if (seccomp_opts & RESOURCECTL) { + for (i =3D 0; i < ARRAY_SIZE(resourcecontrol_syscalls); i++) { + rc =3D seccomp_rule_add(ctx, SCMP_ACT_KILL, resourcecontrol_sy= scalls[i].num, 0); + if (rc < 0) { + goto seccomp_return; + } + rc =3D seccomp_syscall_priority(ctx, resourcecontrol_syscalls[= i].num, resourcecontrol_syscalls[i].priority); + if (rc < 0) { + goto seccomp_return; + } + } + } + rc =3D seccomp_load(ctx); =20 seccomp_return: diff --git a/vl.c b/vl.c index 6a6e9a69bf..3ceffef094 100644 --- a/vl.c +++ b/vl.c @@ -281,6 +281,10 @@ static QemuOptsList qemu_sandbox_opts =3D { .name =3D "spawn", .type =3D QEMU_OPT_STRING, }, + { + .name =3D "resourcecontrol", + .type =3D QEMU_OPT_STRING, + }, { /* end of list */ } }, }; @@ -1067,6 +1071,13 @@ static int parse_sandbox(void *opaque, QemuOpts *opt= s, Error **errp) } } =20 + value =3D qemu_opt_get(opts,"resourcecontrol"); + if (value) { + if (strcmp(value, "deny") =3D=3D 0) { + seccomp_opts |=3D RESOURCECTL; + } + } + if (seccomp_start(seccomp_opts) < 0) { error_report("failed to install seccomp syscall filter " "in the kernel"); --=20 2.11.0