From patchwork Wed Oct 31 12:27:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ondrej Mosnacek X-Patchwork-Id: 10662581 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AEAD014DE for ; Wed, 31 Oct 2018 12:29:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 995672A3D1 for ; Wed, 31 Oct 2018 12:29:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8BC6C2A3E6; Wed, 31 Oct 2018 12:29:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from usfb19pa16.eemsg.mail.mil (uphb19pa13.eemsg.mail.mil [214.24.26.87]) (using TLSv1.2 with cipher DHE-RSA-AES256-SHA256 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0D3072A3D1 for ; Wed, 31 Oct 2018 12:29:45 +0000 (UTC) X-EEMSG-check-008: 139889525|USFB19PA16_EEMSG_MP12.csd.disa.mil Received: from emsm-gh1-uea11.ncsc.mil ([214.29.60.3]) by usfb19pa16.eemsg.mail.mil with ESMTP/TLS/DHE-RSA-AES256-SHA256; 31 Oct 2018 12:29:42 +0000 X-IronPort-AV: E=Sophos;i="5.54,447,1534809600"; d="scan'208";a="20094551" IronPort-PHdr: 9a23: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 X-IPAS-Result: A2ASAACRn9lb/wHyM5BkGgEBAQEBAgEBAQEHAgEBAQGBUgQBAQEBCwGBVSwDZiNcKIxtlk2OGBSBWxYBARgLCAGHdyI1DA0BAwEBAQEBAQIBbBwMgjYkAYJgAwMBAiQTFCALAwMJAQFACAgDAS0DAQUBCxEGAQcLBRYCBIMAAYF0DQMBC5xMPIwHM4U8hGcFEocxhCYXgUE/gRGEUwGBWQKBLgESAQuFbwKJAgSGLY9sCYYvPYoTCxiJNIcbjHyKDgYCCQcPIYEjATZkcU0jFTuCbIImDAuDSIpRAm6BBQEBiQEOF4InAQE Received: from tarius.tycho.ncsc.mil ([144.51.242.1]) by emsm-gh1-uea11.NCSC.MIL with ESMTP; 31 Oct 2018 12:29:40 +0000 Received: from prometheus.infosec.tycho.ncsc.mil (prometheus [192.168.25.40]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w9VCSd7u005128; Wed, 31 Oct 2018 08:28:51 -0400 Received: from tarius.tycho.ncsc.mil (tarius.infosec.tycho.ncsc.mil [144.51.242.1]) by prometheus.infosec.tycho.ncsc.mil (8.15.2/8.15.2) with ESMTP id w9VCSb9d014666 for ; Wed, 31 Oct 2018 08:28:37 -0400 Received: from goalie.tycho.ncsc.mil (goalie.tycho.ncsc.mil [144.51.242.250]) by tarius.tycho.ncsc.mil (8.14.4/8.14.4) with ESMTP id w9VCSbq1005126 for ; Wed, 31 Oct 2018 08:28:37 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A1ANAAAen9lblywYGNZkGwEBAQEDAQEBBwMBAQGBUgUBAQELAYFVLGl/KIxtlk2OGIF6CwEBI4RJAoM1IjUMDQEDAQEBAQEBAhQBAQEBAQYYBkyFRwMDJ1IQUTQBBQEcBgESG4MGAYF0DQMBC5xKPIwHM4ojBRKHMYQmF4FBP4ERhFMBgVkCgU2FbwKJAgSWGQmGLz2KEwsYiTSHG4x8ig4GAgkHDyGBJAGCCk0jFTuCbIImDAIJg0iKUQJuigiCTAEB X-IPAS-Result: A1ANAAAen9lblywYGNZkGwEBAQEDAQEBBwMBAQGBUgUBAQELAYFVLGl/KIxtlk2OGIF6CwEBI4RJAoM1IjUMDQEDAQEBAQEBAhQBAQEBAQYYBkyFRwMDJ1IQUTQBBQEcBgESG4MGAYF0DQMBC5xKPIwHM4ojBRKHMYQmF4FBP4ERhFMBgVkCgU2FbwKJAgSWGQmGLz2KEwsYiTSHG4x8ig4GAgkHDyGBJAGCCk0jFTuCbIImDAIJg0iKUQJuigiCTAEB X-IronPort-AV: E=Sophos;i="5.54,447,1534824000"; d="scan'208";a="403655" Received: from emsm-gh1-uea10.ncsc.mil ([214.29.60.34]) by goalie.tycho.ncsc.mil with ESMTP; 31 Oct 2018 08:28:36 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0ALAAAen9lblywYGNZkGwEBAQEDAQEBBwMBAQGBUgUBAQELAYFVLGl/KIxtlk2OGIF6CwEBI4RJAoM1IjUMDQEDAQEBAQEBAgETAQEBAQEGGAZMDII2JAGCYAMDJ1IQUTQBBQEcBgESG4MGAYF0DQMBC5xKPIwHM4ojBRKHMYQmF4FBP4ERhFMBgVkCgU2FbwKJAgSWGQmGLz2KEwsYiTSHG4x8ig4GAgkHDyGBJAGCCk0jFTuCbIImDAIJg0iKUQJuigiCTAEB X-IPAS-Result: A0ALAAAen9lblywYGNZkGwEBAQEDAQEBBwMBAQGBUgUBAQELAYFVLGl/KIxtlk2OGIF6CwEBI4RJAoM1IjUMDQEDAQEBAQEBAgETAQEBAQEGGAZMDII2JAGCYAMDJ1IQUTQBBQEcBgESG4MGAYF0DQMBC5xKPIwHM4ojBRKHMYQmF4FBP4ERhFMBgVkCgU2FbwKJAgSWGQmGLz2KEwsYiTSHG4x8ig4GAgkHDyGBJAGCCk0jFTuCbIImDAIJg0iKUQJuigiCTAEB X-IronPort-AV: E=Sophos;i="5.54,447,1534809600"; d="scan'208";a="17390010" X-IronPort-Outbreak-Status: No, level 0, Unknown - Unknown Received: from ucol3cpa06.eemsg.mail.mil ([214.24.24.44]) by EMSM-GH1-UEA10.NCSC.MIL with ESMTP; 31 Oct 2018 12:28:36 +0000 X-EEMSG-check-005: 0 X-EEMSG-check-006: 000-001;79045fc2-87b9-4ece-82e3-c2a15a505bd9 Authentication-Results: UCOL3CPA13.eemsg.mail.mil; dkim=none (message not signed) header.i=none; spf=None smtp.pra=omosnace@redhat.com; spf=Pass smtp.mailfrom=omosnace@redhat.com; spf=None smtp.helo=postmaster@mail-wr1-f67.google.com; dmarc=pass (p=none dis=none) d=redhat.com X-EEMSG-check-008: 67169456|UCOL3CPA13_EEMSG_MP28.csd.disa.mil X-EEMSG-check-001: false X-EEMSG-SBRS: 2.7 X-EEMSG-ORIG-IP: 209.85.221.67 X-EEMSG-check-002: true X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A0AiAAAen9lbf0PdVdFkHAEBAQQBAQcEAQGBUQcBAQsBgVWBFYEnjA5flk2OGIF6CwEBI4RJAoM1GgcBBDANDQEDAQEBAQEBAQEBEwEBCQsLCBsMJQyCNiQBgmADAydSEFE0AQUBHAYBEhuDBgGBdA0EC5xKPIwHM4ojBQkBCIcxhCYXgUE/gRGEUwGBWQKBTYVvAokCBJYZCYYvPYoTCxiJNIcbjHyKDgYCCQcPIYEigg1NIxU7gmyCJgwLg0iKUQJuigiCTAEB X-IPAS-Result: A0AiAAAen9lbf0PdVdFkHAEBAQQBAQcEAQGBUQcBAQsBgVWBFYEnjA5flk2OGIF6CwEBI4RJAoM1GgcBBDANDQEDAQEBAQEBAQEBEwEBCQsLCBsMJQyCNiQBgmADAydSEFE0AQUBHAYBEhuDBgGBdA0EC5xKPIwHM4ojBQkBCIcxhCYXgUE/gRGEUwGBWQKBTYVvAokCBJYZCYYvPYoTCxiJNIcbjHyKDgYCCQcPIYEigg1NIxU7gmyCJgwLg0iKUQJuigiCTAEB Received: from mail-wr1-f67.google.com ([209.85.221.67]) by UCOL3CPA13.eemsg.mail.mil with ESMTP/TLS/AES128-SHA; 31 Oct 2018 12:28:22 +0000 Received: by mail-wr1-f67.google.com with SMTP id g9-v6so16264487wrq.4 for ; Wed, 31 Oct 2018 05:28:22 -0700 (PDT) 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=wme2G4bxeUSR4HMTwFRUh5ZiJN45NM0Ii+m2MVJZFog=; b=Kd/OzTnvzXP7zbmUTTZArK7UMmL70WSxPGHqjGQFeHaRwxvbZiq6IEJoSEA94eUQGt /dA8fFg+mYuOej8qwTogbkBNBg2kYrsKdK4lmN8Xo9jnCp5ApqHkH25NHCg23cxFFEzv cRpCIe07o4YEoJq+LVpDfLwaaDr0rGVHDzNA7YGWaP9z4fDSYk7jRfeP6of5T0/1V6br aGsfzxAhf3dzlIjQomzP7L3Ng8uoo1G7zUmHXrTMWjbQCI6QqC1SFFSMNrHc/7dIj7D5 fOzKA9aLAjw7E4CxLnA5iv64CiHNObCJ+XJHa7ugaNK6DeGO37js2q+2vNZq/IHZ8i6n GwSw== X-Gm-Message-State: AGRZ1gIN9HDh9fp6o1WV4TIH8H6QTCqWwO7C4wsXC+1QJYUyusHuOwIk SoZE3tEO1kQNxA/ol2Yb8VviKA== X-Google-Smtp-Source: AJdET5egRUBDfttOx1OgmOEP19/R9zoUXxeVrJMaWewYA1Qsq04Trm5GWeXvcopSEn1KrLw6BEI90w== X-Received: by 2002:adf:f787:: with SMTP id q7-v6mr2837557wrp.9.1540988900713; Wed, 31 Oct 2018 05:28:20 -0700 (PDT) Received: from localhost.localdomain.com (nat-pool-brq-t.redhat.com. [213.175.37.10]) by smtp.gmail.com with ESMTPSA id m192-v6sm9131737wmb.29.2018.10.31.05.28.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 31 Oct 2018 05:28:20 -0700 (PDT) X-EEMSG-check-009: 444-444 From: Ondrej Mosnacek To: selinux@vger.kernel.org, Paul Moore Date: Wed, 31 Oct 2018 13:27:18 +0100 Message-Id: <20181031122718.18735-3-omosnace@redhat.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20181031122718.18735-1-omosnace@redhat.com> References: <20181031122718.18735-1-omosnace@redhat.com> Subject: [PATCH 2/2] selinux: fix ENOMEM errors during policy reload X-BeenThere: selinux@tycho.nsa.gov X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Security-Enhanced Linux \(SELinux\) mailing list" List-Post: List-Help: Cc: Stephen Smalley , selinux@tycho.nsa.gov MIME-Version: 1.0 Errors-To: selinux-bounces@tycho.nsa.gov Sender: "Selinux" X-Virus-Scanned: ClamAV using ClamSMTP Before this patch, during a policy reload the sidtab would become frozen and trying to map a new context to SID would be unable to add a new entry to sidtab and fail with -ENOMEM. Such failures are usually propagated into userspace, which has no way of distignuishing them from actual allocation failures and thus doesn't handle them gracefully. Such situation can be triggered e.g. by the following reproducer: while true; do load_policy; echo -n .; sleep 0.1; done & for (( i = 0; i < 1024; i++ )); do runcon -l s0:c$i echo -n x || break # or: # chcon -l s0:c$i || break done This patchs overhauls the sidtab so it doesn't need to be frozen during a policy reload, thus solving the above problem. The new SID table entries now contain two slots for the context. One of the slots is used for the lookup and the other one is used during policy reload to store the new converted context. Which slot is used for what is determined by a shared index that is toggled between 0 and 1 when the conversion is completed, together with the switch to the new policy. After the index is toggled, the contexts in the now unused slots are destroyed. The solution also gracefully handles conversion of entries that are added to sidtab while the conversion is in progress. The downside of this solution is that the sidtab now takes up approximately twice the space and half of it is used only during policy reload. On the other hand, this means we do not need to deal with sidtab growing while we are allocating a new one. Reported-by: Orion Poplawski Reported-by: Li Kun Link: https://github.com/SELinuxProject/selinux-kernel/issues/38 Signed-off-by: Ondrej Mosnacek --- security/selinux/ss/mls.c | 16 ++--- security/selinux/ss/mls.h | 3 +- security/selinux/ss/services.c | 96 +++++++------------------- security/selinux/ss/sidtab.c | 122 +++++++++++++++++++++------------ security/selinux/ss/sidtab.h | 23 ++++--- 5 files changed, 124 insertions(+), 136 deletions(-) diff --git a/security/selinux/ss/mls.c b/security/selinux/ss/mls.c index cd637ee3fb11..bc3f93732658 100644 --- a/security/selinux/ss/mls.c +++ b/security/selinux/ss/mls.c @@ -441,11 +441,11 @@ int mls_setup_user_range(struct policydb *p, */ int mls_convert_context(struct policydb *oldp, struct policydb *newp, - struct context *c) + struct context *oldc, + struct context *newc) { struct level_datum *levdatum; struct cat_datum *catdatum; - struct ebitmap bitmap; struct ebitmap_node *node; int l, i; @@ -455,28 +455,26 @@ int mls_convert_context(struct policydb *oldp, for (l = 0; l < 2; l++) { levdatum = hashtab_search(newp->p_levels.table, sym_name(oldp, SYM_LEVELS, - c->range.level[l].sens - 1)); + oldc->range.level[l].sens - 1)); if (!levdatum) return -EINVAL; - c->range.level[l].sens = levdatum->level->sens; + newc->range.level[l].sens = levdatum->level->sens; - ebitmap_init(&bitmap); - ebitmap_for_each_positive_bit(&c->range.level[l].cat, node, i) { + ebitmap_for_each_positive_bit(&oldc->range.level[l].cat, node, i) { int rc; catdatum = hashtab_search(newp->p_cats.table, sym_name(oldp, SYM_CATS, i)); if (!catdatum) return -EINVAL; - rc = ebitmap_set_bit(&bitmap, catdatum->value - 1, 1); + rc = ebitmap_set_bit(&newc->range.level[l].cat, + catdatum->value - 1, 1); if (rc) return rc; cond_resched(); } - ebitmap_destroy(&c->range.level[l].cat); - c->range.level[l].cat = bitmap; } return 0; diff --git a/security/selinux/ss/mls.h b/security/selinux/ss/mls.h index 1eca02c8bc5f..00c11304f71a 100644 --- a/security/selinux/ss/mls.h +++ b/security/selinux/ss/mls.h @@ -46,7 +46,8 @@ int mls_range_set(struct context *context, struct mls_range *range); int mls_convert_context(struct policydb *oldp, struct policydb *newp, - struct context *context); + struct context *oldc, + struct context *newc); int mls_compute_sid(struct policydb *p, struct context *scontext, diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 550a00004139..292a2ccbe56f 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c @@ -1899,12 +1899,6 @@ int security_change_sid(struct selinux_state *state, out_sid, false); } -/* Clone the SID into the new SID table. */ -static int clone_sid(u32 sid, struct context *context, void *arg) -{ - return sidtab_insert((struct sidtab *)arg, sid, context); -} - static inline int convert_context_handle_invalid_context( struct selinux_state *state, struct context *context) @@ -1937,12 +1931,10 @@ struct convert_context_args { * in the policy `p->newp'. Verify that the * context is valid under the new policy. */ -static int convert_context(u32 key, struct context *c, void *p) +static int convert_context(struct context *oldc, struct context *newc, void *p) { struct convert_context_args *args; - struct context oldc; struct ocontext *oc; - struct mls_range *range; struct role_datum *role; struct type_datum *typdatum; struct user_datum *usrdatum; @@ -1952,23 +1944,18 @@ static int convert_context(u32 key, struct context *c, void *p) args = p; - if (c->str) { - struct context ctx; - + if (oldc->str) { rc = -ENOMEM; - s = kstrdup(c->str, GFP_KERNEL); + s = kstrdup(oldc->str, GFP_KERNEL); if (!s) goto out; rc = string_to_context_struct(args->newp, NULL, s, - &ctx, SECSID_NULL); + newc, SECSID_NULL); kfree(s); if (!rc) { pr_info("SELinux: Context %s became valid (mapped).\n", - c->str); - /* Replace string with mapped representation. */ - kfree(c->str); - memcpy(c, &ctx, sizeof(*c)); + oldc->str); goto out; } else if (rc == -EINVAL) { /* Retain string representation for later mapping. */ @@ -1977,51 +1964,42 @@ static int convert_context(u32 key, struct context *c, void *p) } else { /* Other error condition, e.g. ENOMEM. */ pr_err("SELinux: Unable to map context %s, rc = %d.\n", - c->str, -rc); + oldc->str, -rc); goto out; } } - rc = context_cpy(&oldc, c); - if (rc) - goto out; + context_init(newc); /* Convert the user. */ rc = -EINVAL; usrdatum = hashtab_search(args->newp->p_users.table, - sym_name(args->oldp, SYM_USERS, c->user - 1)); + sym_name(args->oldp, SYM_USERS, oldc->user - 1)); if (!usrdatum) goto bad; - c->user = usrdatum->value; + newc->user = usrdatum->value; /* Convert the role. */ rc = -EINVAL; role = hashtab_search(args->newp->p_roles.table, - sym_name(args->oldp, SYM_ROLES, c->role - 1)); + sym_name(args->oldp, SYM_ROLES, oldc->role - 1)); if (!role) goto bad; - c->role = role->value; + newc->role = role->value; /* Convert the type. */ rc = -EINVAL; typdatum = hashtab_search(args->newp->p_types.table, - sym_name(args->oldp, SYM_TYPES, c->type - 1)); + sym_name(args->oldp, SYM_TYPES, oldc->type - 1)); if (!typdatum) goto bad; - c->type = typdatum->value; + newc->type = typdatum->value; /* Convert the MLS fields if dealing with MLS policies */ if (args->oldp->mls_enabled && args->newp->mls_enabled) { - rc = mls_convert_context(args->oldp, args->newp, c); + rc = mls_convert_context(args->oldp, args->newp, oldc, newc); if (rc) goto bad; - } else if (args->oldp->mls_enabled && !args->newp->mls_enabled) { - /* - * Switching between MLS and non-MLS policy: - * free any storage used by the MLS fields in the - * context for all existing entries in the sidtab. - */ - mls_context_destroy(c); } else if (!args->oldp->mls_enabled && args->newp->mls_enabled) { /* * Switching between non-MLS and MLS policy: @@ -2039,36 +2017,31 @@ static int convert_context(u32 key, struct context *c, void *p) " the initial SIDs list\n"); goto bad; } - range = &oc->context[0].range; - rc = mls_range_set(c, range); + rc = mls_range_set(newc, &oc->context[0].range); if (rc) goto bad; } /* Check the validity of the new context. */ - if (!policydb_context_isvalid(args->newp, c)) { - rc = convert_context_handle_invalid_context(args->state, - &oldc); + if (!policydb_context_isvalid(args->newp, newc)) { + rc = convert_context_handle_invalid_context(args->state, oldc); if (rc) goto bad; } - context_destroy(&oldc); - rc = 0; out: return rc; bad: /* Map old representation to string and save it. */ - rc = context_struct_to_string(args->oldp, &oldc, &s, &len); + rc = context_struct_to_string(args->oldp, oldc, &s, &len); if (rc) return rc; - context_destroy(&oldc); - context_destroy(c); - c->str = s; - c->len = len; + context_destroy(newc); + newc->str = s; + newc->len = len; pr_info("SELinux: Context %s became invalid (unmapped).\n", - c->str); + newc->str); rc = 0; goto out; } @@ -2113,7 +2086,6 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) struct sidtab *sidtab; struct isidtab *newisidtab = NULL; struct policydb *oldpolicydb, *newpolicydb; - struct sidtab oldsidtab, newsidtab; struct selinux_mapping *oldmapping; struct selinux_map newmap; struct convert_context_args args; @@ -2187,12 +2159,6 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) if (rc) goto out; - rc = sidtab_init(&newsidtab); - if (rc) { - policydb_destroy(newpolicydb); - goto out; - } - newpolicydb->len = len; /* If switching between different policy types, log MLS status */ if (policydb->mls_enabled && !newpolicydb->mls_enabled) @@ -2203,7 +2169,6 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) rc = policydb_load_isids(newpolicydb, newisidtab); if (rc) { pr_err("SELinux: unable to load the initial SIDs\n"); - sidtab_destroy(&newsidtab); policydb_destroy(newpolicydb); goto out; } @@ -2218,21 +2183,14 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) goto err; } - /* Clone the SID table. */ - sidtab_shutdown(sidtab); - - rc = sidtab_map(sidtab, clone_sid, &newsidtab); - if (rc) - goto err; - /* * Convert the internal representations of contexts - * in the new SID table. + * in the SID table. */ args.state = state; args.oldp = policydb; args.newp = newpolicydb; - rc = sidtab_map(&newsidtab, convert_context, &args); + rc = sidtab_convert_start(sidtab, convert_context, &args); if (rc) { pr_err("SELinux: unable to convert the internal" " representation of contexts in the new SID" @@ -2242,19 +2200,18 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) /* Save the old policydb and SID table to free later. */ memcpy(oldpolicydb, policydb, sizeof(*policydb)); - sidtab_set(&oldsidtab, sidtab); /* Install the new policydb and SID table. */ write_lock_irq(&state->ss->policy_rwlock); memcpy(policydb, newpolicydb, sizeof(*policydb)); - sidtab_set(sidtab, &newsidtab); isidtab_destroy(state->ss->isidtab); kfree(state->ss->isidtab); state->ss->isidtab = newisidtab; newisidtab = NULL; + sidtab_convert_finish(sidtab); security_load_policycaps(state); oldmapping = state->ss->map.mapping; state->ss->map.mapping = newmap.mapping; @@ -2264,8 +2221,8 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) write_unlock_irq(&state->ss->policy_rwlock); /* Free the old policydb and SID table. */ + sidtab_convert_cleanup(sidtab); policydb_destroy(oldpolicydb); - sidtab_destroy(&oldsidtab); kfree(oldmapping); avc_ss_reset(state->avc, seqno); @@ -2279,7 +2236,6 @@ int security_load_policy(struct selinux_state *state, void *data, size_t len) err: kfree(newmap.mapping); - sidtab_destroy(&newsidtab); policydb_destroy(newpolicydb); isidtab_destroy(newisidtab); diff --git a/security/selinux/ss/sidtab.c b/security/selinux/ss/sidtab.c index 98710657a596..ac4781a191d9 100644 --- a/security/selinux/ss/sidtab.c +++ b/security/selinux/ss/sidtab.c @@ -24,16 +24,17 @@ int sidtab_init(struct sidtab *s) return -ENOMEM; for (i = 0; i < SIDTAB_SIZE; i++) s->htable[i] = NULL; + s->context_index = 0; s->nel = 0; s->next_sid = SECINITSID_NUM + 1; - s->shutdown = 0; spin_lock_init(&s->lock); return 0; } -int sidtab_insert(struct sidtab *s, u32 sid, struct context *context) +static int sidtab_insert(struct sidtab *s, u32 sid, struct context *context) { - int hvalue; + unsigned int index = s->context_index; + int hvalue, rc; struct sidtab_node *prev, *cur, *newnode; if (!s) @@ -55,11 +56,23 @@ int sidtab_insert(struct sidtab *s, u32 sid, struct context *context) return -ENOMEM; newnode->sid = sid; - if (context_cpy(&newnode->context, context)) { + if (context_cpy(&newnode->context[index], context)) { kfree(newnode); return -ENOMEM; } + newnode->new_set = 0; + if (s->convert) { + rc = s->convert(&newnode->context[index], + &newnode->context[!index], s->convert_args); + if (rc) { + context_destroy(&newnode->context[index]); + kfree(newnode); + return rc; + } + newnode->new_set = 1; + } + if (prev) { newnode->next = prev->next; wmb(); @@ -92,34 +105,74 @@ struct context *sidtab_lookup(struct sidtab *s, u32 sid) if (!cur || sid != cur->sid) return NULL; - return &cur->context; + return &cur->context[s->context_index]; } -int sidtab_map(struct sidtab *s, - int (*apply) (u32 sid, - struct context *context, - void *args), - void *args) +int sidtab_convert_start(struct sidtab *s, sidtab_convert_t convert, void *args) { - int i, rc = 0; + unsigned long flags; + int i, rc; struct sidtab_node *cur; - if (!s) - goto out; + spin_lock_irqsave(&s->lock, flags); + s->convert = convert; + s->convert_args = args; + spin_unlock_irqrestore(&s->lock, flags); for (i = 0; i < SIDTAB_SIZE; i++) { cur = s->htable[i]; while (cur) { - rc = apply(cur->sid, &cur->context, args); - if (rc) - goto out; + if (!cur->new_set) { + rc = convert(&cur->context[s->context_index], + &cur->context[!s->context_index], + args); + if (rc) + goto err; + + cur->new_set = 1; + } cur = cur->next; } } -out: + + return 0; +err: + /* cleanup on conversion failure */ + spin_lock_irqsave(&s->lock, flags); + s->convert = NULL; + s->convert_args = NULL; + spin_unlock_irqrestore(&s->lock, flags); + + sidtab_convert_cleanup(s); + return rc; } +/* must be called with policy write lock (thus no need to lock the spinlock here) */ +void sidtab_convert_finish(struct sidtab *s) +{ + s->context_index = !s->context_index; + s->convert = NULL; + s->convert_args = NULL; +} + +void sidtab_convert_cleanup(struct sidtab *s) +{ + struct sidtab_node *cur; + int i; + + for (i = 0; i < SIDTAB_SIZE; i++) { + cur = s->htable[i]; + while (cur) { + if (cur->new_set) { + cur->new_set = 0; + context_destroy(&cur->context[!s->context_index]); + } + cur = cur->next; + } + } +} + static void sidtab_update_cache(struct sidtab *s, struct sidtab_node *n, int loc) { BUG_ON(loc >= SIDTAB_CACHE_LEN); @@ -132,7 +185,7 @@ static void sidtab_update_cache(struct sidtab *s, struct sidtab_node *n, int loc } static inline u32 sidtab_search_context(struct sidtab *s, - struct context *context) + struct context *context) { int i; struct sidtab_node *cur; @@ -140,7 +193,7 @@ static inline u32 sidtab_search_context(struct sidtab *s, for (i = 0; i < SIDTAB_SIZE; i++) { cur = s->htable[i]; while (cur) { - if (context_cmp(&cur->context, context)) { + if (context_cmp(&cur->context[s->context_index], context)) { sidtab_update_cache(s, cur, SIDTAB_CACHE_LEN - 1); return cur->sid; } @@ -159,7 +212,7 @@ static inline u32 sidtab_search_cache(struct sidtab *s, struct context *context) node = s->cache[i]; if (unlikely(!node)) return 0; - if (context_cmp(&node->context, context)) { + if (context_cmp(&node->context[s->context_index], context)) { sidtab_update_cache(s, node, i); return node->sid; } @@ -187,7 +240,7 @@ int sidtab_context_to_sid(struct sidtab *s, if (sid) goto unlock_out; /* No SID exists for the context. Allocate a new one. */ - if (s->next_sid == UINT_MAX || s->shutdown) { + if (s->next_sid == UINT_MAX) { ret = -ENOMEM; goto unlock_out; } @@ -249,7 +302,9 @@ void sidtab_destroy(struct sidtab *s) while (cur) { temp = cur; cur = cur->next; - context_destroy(&temp->context); + context_destroy(&temp->context[s->context_index]); + if (temp->new_set) + context_destroy(&temp->context[!s->context_index]); kfree(temp); } s->htable[i] = NULL; @@ -260,26 +315,3 @@ void sidtab_destroy(struct sidtab *s) s->next_sid = 1; } -void sidtab_set(struct sidtab *dst, struct sidtab *src) -{ - unsigned long flags; - int i; - - spin_lock_irqsave(&src->lock, flags); - dst->htable = src->htable; - dst->nel = src->nel; - dst->next_sid = src->next_sid; - dst->shutdown = 0; - for (i = 0; i < SIDTAB_CACHE_LEN; i++) - dst->cache[i] = NULL; - spin_unlock_irqrestore(&src->lock, flags); -} - -void sidtab_shutdown(struct sidtab *s) -{ - unsigned long flags; - - spin_lock_irqsave(&s->lock, flags); - s->shutdown = 1; - spin_unlock_irqrestore(&s->lock, flags); -} diff --git a/security/selinux/ss/sidtab.h b/security/selinux/ss/sidtab.h index 2eadd09a1100..85ed33238dbb 100644 --- a/security/selinux/ss/sidtab.h +++ b/security/selinux/ss/sidtab.h @@ -11,8 +11,9 @@ #include "context.h" struct sidtab_node { - u32 sid; /* security identifier */ - struct context context; /* security context structure */ + u32 sid; /* security identifier */ + int new_set; /* is context for new policy set? */ + struct context context[2]; /* security context structures */ struct sidtab_node *next; }; @@ -22,25 +23,27 @@ struct sidtab_node { #define SIDTAB_SIZE SIDTAB_HASH_BUCKETS +typedef int (*sidtab_convert_t)(struct context *oldc, struct context *newc, + void *args); + struct sidtab { struct sidtab_node **htable; + unsigned int context_index; unsigned int nel; /* number of elements */ unsigned int next_sid; /* next SID to allocate */ - unsigned char shutdown; + sidtab_convert_t convert; + void *convert_args; #define SIDTAB_CACHE_LEN 3 struct sidtab_node *cache[SIDTAB_CACHE_LEN]; spinlock_t lock; }; int sidtab_init(struct sidtab *s); -int sidtab_insert(struct sidtab *s, u32 sid, struct context *context); struct context *sidtab_lookup(struct sidtab *s, u32 sid); -int sidtab_map(struct sidtab *s, - int (*apply) (u32 sid, - struct context *context, - void *args), - void *args); +int sidtab_convert_start(struct sidtab *s, sidtab_convert_t convert, void *args); +void sidtab_convert_finish(struct sidtab *s); +void sidtab_convert_cleanup(struct sidtab *s); int sidtab_context_to_sid(struct sidtab *s, struct context *context, @@ -48,8 +51,6 @@ int sidtab_context_to_sid(struct sidtab *s, void sidtab_hash_eval(struct sidtab *h, char *tag); void sidtab_destroy(struct sidtab *s); -void sidtab_set(struct sidtab *dst, struct sidtab *src); -void sidtab_shutdown(struct sidtab *s); #endif /* _SS_SIDTAB_H_ */