[lxc-devel] [PATCH 1/1] seccomp: add 'lxc.seccomp.optional'
Stéphane Graber
stgraber at ubuntu.com
Mon Feb 17 22:16:51 UTC 2014
On Mon, Feb 17, 2014 at 02:05:10PM -0600, Serge Hallyn wrote:
> If that is set, then if reading the policy failed, we continue
> without trying to load seccomp. (If reading the policy
> succeeded, then we do not ignore failure to load the policy;
> we could consider doing that as well, however the goal here
> is to have a generic container configuration work whether
> the host has seccompv2 support or not)
>
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Acked-by: Stéphane Graber <stgraber at ubuntu.com>
> ---
> src/lxc/attach.c | 10 ++++++++--
> src/lxc/conf.h | 1 +
> src/lxc/confile.c | 15 +++++++++++++++
> src/lxc/start.c | 9 +++++++--
> 4 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/src/lxc/attach.c b/src/lxc/attach.c
> index 31a5ae7..600332a 100644
> --- a/src/lxc/attach.c
> +++ b/src/lxc/attach.c
> @@ -613,8 +613,14 @@ static bool fetch_seccomp(const char *name, const char *lxcpath,
> if (!c->lxc_conf)
> return false;
> if (lxc_read_seccomp_config(c->lxc_conf) < 0) {
> - ERROR("Error reaading seccomp policy");
> - return false;
> + if (c->lxc_conf->seccomp_optional) {
> + WARN("Ignoring error loading seccomp policy.");
> + lxc_container_put(c);
> + i->container = NULL;
> + } else {
> + ERROR("Error reaading seccomp policy");
> + return false;
> + }
> }
>
> return true;
> diff --git a/src/lxc/conf.h b/src/lxc/conf.h
> index 4591470..3622287 100644
> --- a/src/lxc/conf.h
> +++ b/src/lxc/conf.h
> @@ -303,6 +303,7 @@ struct lxc_conf {
> char *lsm_se_context;
> int tmp_umount_proc;
> char *seccomp; // filename with the seccomp rules
> + bool seccomp_optional; // proceed if seccomp_load fails
> #if HAVE_SCMP_FILTER_CTX
> scmp_filter_ctx *seccomp_ctx;
> #endif
> diff --git a/src/lxc/confile.c b/src/lxc/confile.c
> index afc9e32..bc99e45 100644
> --- a/src/lxc/confile.c
> +++ b/src/lxc/confile.c
> @@ -89,6 +89,7 @@ static int config_cap_drop(const char *, const char *, struct lxc_conf *);
> static int config_cap_keep(const char *, const char *, struct lxc_conf *);
> static int config_console(const char *, const char *, struct lxc_conf *);
> static int config_seccomp(const char *, const char *, struct lxc_conf *);
> +static int config_seccomp_opt(const char *, const char *, struct lxc_conf *);
> static int config_includefile(const char *, const char *, struct lxc_conf *);
> static int config_network_nic(const char *, const char *, struct lxc_conf *);
> static int config_autodev(const char *, const char *, struct lxc_conf *);
> @@ -143,6 +144,7 @@ static struct lxc_config_t config[] = {
> { "lxc.cap.drop", config_cap_drop },
> { "lxc.cap.keep", config_cap_keep },
> { "lxc.console", config_console },
> + { "lxc.seccomp.optional", config_seccomp_opt },
> { "lxc.seccomp", config_seccomp },
> { "lxc.include", config_includefile },
> { "lxc.autodev", config_autodev },
> @@ -928,6 +930,19 @@ static int config_seccomp(const char *key, const char *value,
> return config_path_item(&lxc_conf->seccomp, value);
> }
>
> +static int config_seccomp_opt(const char *key, const char *value,
> + struct lxc_conf *lxc_conf)
> +{
> + int opt, ret;
> +
> + ret = sscanf(value, "%d", &opt);
> + if (ret != 1)
> + return -1;
> + lxc_conf->seccomp_optional = opt == 1;
> +
> + return 0;
> +}
> +
> static int config_hook(const char *key, const char *value,
> struct lxc_conf *lxc_conf)
> {
> diff --git a/src/lxc/start.c b/src/lxc/start.c
> index 5b3b6eb..8c3c40f 100644
> --- a/src/lxc/start.c
> +++ b/src/lxc/start.c
> @@ -381,8 +381,13 @@ struct lxc_handler *lxc_init(const char *name, struct lxc_conf *conf, const char
> goto out_free_name;
>
> if (lxc_read_seccomp_config(conf) != 0) {
> - ERROR("failed loading seccomp policy");
> - goto out_close_maincmd_fd;
> + if (conf->seccomp_optional) {
> + WARN("Ignoring error loading seccomp policy.");
> + lxc_seccomp_free(conf);
> + } else {
> + ERROR("Exiting on failure to load seccomp policy");
> + goto out_close_maincmd_fd;
> + }
> }
>
> /* Begin by setting the state to STARTING */
> --
> 1.9.rc1
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
--
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20140217/3e8b367e/attachment.pgp>
More information about the lxc-devel
mailing list