Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1564853imm; Wed, 10 Oct 2018 17:29:14 -0700 (PDT) X-Google-Smtp-Source: ACcGV63pVyz+eQdWZ4Y9sOcVgi6KkUB46T2I0EaWCpehVlptRVQ6IJjlg+ntjDyozUWKGUTpQrSn X-Received: by 2002:a63:7d2:: with SMTP id 201-v6mr32258367pgh.129.1539217754374; Wed, 10 Oct 2018 17:29:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539217754; cv=none; d=google.com; s=arc-20160816; b=bamgGs3baByS58SLbXjCWT8zB7Dxr3oLoNu+hnZuDlpTVuGhuQctZdges5LT53VU22 nqjGg+SeoLAZ/clNJNbmQR+FNcbi9VlCfyN4uF39N8DWXNhXQXxxlo0JRQHXVMJpOVy/ l0Ewp8GnxqZSSotkT3TVqWv859TZUKGCDmUGPG8TYwbOCEgoHSFHZWNtuL8ZDTUW0UYr DkJ/Wm6ZSxWlBCiuAX52W3O/bNZxChbLhOMJghlkLBBwWQsNkYWCQ/y7eR8hRkDrChGK y9RIZDJNsNOTeH6RyxJs9355pAhVkVMdjGcL+kLzphMm97x43VrZJtBjeH2vGF86uBhf +3aA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=7MWm0+P/X+39HL+s8UrwNL/nmKrjGJUnQdRflWFBBLo=; b=cHLvMD5LY+qH6fpaWlDOvBewrSBmVuDMGPtd5z2VAwzrr34OL1lpTQHN5NC21OHU0t a6KN2bG+G7yO8wtsQiyyWxPSnX1mTdzeqOF2kDValOSlVdyRKzJACs2v2XROHMR8BBHW dkGkMnfaN0MbQzMRy2rk0jJQtNhbY5/wTIKMF+A+UDsnrEY0qvaT7zLPFdgzEekCZhdT PRUSBc6pCPiczt0spibD4sqeV3/p9IBmtMH2ZXiF/dILfJYssTKqbtqpdYb3eYy8OllH GAhxaEb4Eoza0I18nAbC8xHMTJPo7G9cj+61YZdG5NtjH8M0k0bylmWbncPk9R3gHRKZ rZTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=YFYFaZPM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r134-v6si31465785pfc.202.2018.10.10.17.28.59; Wed, 10 Oct 2018 17:29:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=YFYFaZPM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727361AbeJKHv3 (ORCPT + 99 others); Thu, 11 Oct 2018 03:51:29 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:38950 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726203AbeJKHuX (ORCPT ); Thu, 11 Oct 2018 03:50:23 -0400 Received: by mail-pf1-f194.google.com with SMTP id c25-v6so3451427pfe.6 for ; Wed, 10 Oct 2018 17:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7MWm0+P/X+39HL+s8UrwNL/nmKrjGJUnQdRflWFBBLo=; b=YFYFaZPMiA6bx2pBhzXKXyqcvud3xTvKW0vJDgjtV6OcljqJzfkIJb+k5aN2/OZBYT kbI9yzJnnTLUovU2SMPJRQFQFeSFoyQFDA3QRihYt9w+bBySiUFFWRS32h8iANEVHkKW cbje0S0KgD59l7H3FViEsEmzw7NNEAKCa1FcQ= 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=7MWm0+P/X+39HL+s8UrwNL/nmKrjGJUnQdRflWFBBLo=; b=p5DUzm22aYldyFtPDbFm28HEMt/tT81jkWILGGxPAIdsYZM1FRr8pImoFwf5KCw4lj CbAr53+OB4PGZm8LxIuZqtlFajj7ZQ1FDa6/Xynh3h12cmvmLn4CRplPhZVGOm8X0z+4 N7evJ+IW0G9b4JoG1/uihSEfVKfVCXerrRnmt5QCxx6AGtbGx9WM9Gqs6cbS1X3N2MGc 47ZlZsjw4pMXXwbAVthxWeHrD1xAVQAdwOREKJ1hrLKdtDunG25Nquk9RH/zIOOltJPD bIof9ZACoAhAdilZfc+RtC7X83mz8IjwYzYi+4YmOaRsgSMTHjjQaLg4u6R4wkKvW8cA TExA== X-Gm-Message-State: ABuFfohncqdEseRSmdcWWnJ2xg9JyRpeQAglmxrzKrnNsZTwlV1N5mSz YzM/h29dqJUMM8HhjNplBvIM3w== X-Received: by 2002:a62:c60a:: with SMTP id m10-v6mr36286695pfg.15.1539217547310; Wed, 10 Oct 2018 17:25:47 -0700 (PDT) Received: from www.outflux.net (173-164-112-133-Oregon.hfc.comcastbusiness.net. [173.164.112.133]) by smtp.gmail.com with ESMTPSA id l83-v6sm62173135pfi.172.2018.10.10.17.25.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 10 Oct 2018 17:25:45 -0700 (PDT) From: Kees Cook To: James Morris Cc: Kees Cook , Casey Schaufler , John Johansen , Stephen Smalley , Paul Moore , Tetsuo Handa , Mimi Zohar , Randy Dunlap , Jordan Glover , LSM , linux-doc@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH security-next v5 17/30] LSM: Introduce CONFIG_LSM Date: Wed, 10 Oct 2018 17:18:33 -0700 Message-Id: <20181011001846.30964-18-keescook@chromium.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181011001846.30964-1-keescook@chromium.org> References: <20181011001846.30964-1-keescook@chromium.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This provides a way to declare LSM initialization order via the new CONFIG_LSM. Currently only non-major LSMs are recognized. This will be expanded in future patches. Signed-off-by: Kees Cook --- security/Kconfig | 9 +++++++++ security/security.c | 27 ++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/security/Kconfig b/security/Kconfig index 27d8b2688f75..005634f7c4bb 100644 --- a/security/Kconfig +++ b/security/Kconfig @@ -276,5 +276,14 @@ config DEFAULT_SECURITY default "apparmor" if DEFAULT_SECURITY_APPARMOR default "" if DEFAULT_SECURITY_DAC +config LSM + string "Ordered list of enabled LSMs" + default "integrity" + help + A comma-separated list of LSMs, in initialization order. + Any LSMs left off this list will be ignored. + + If unsure, leave this as the default. + endmenu diff --git a/security/security.c b/security/security.c index 9bb15d697287..1c4889bce917 100644 --- a/security/security.c +++ b/security/security.c @@ -48,6 +48,8 @@ char *lsm_names; static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] = CONFIG_DEFAULT_SECURITY; +static __initconst const char * const builtin_lsm_order = CONFIG_LSM; + /* Ordered list of LSMs to initialize. */ static __initdata struct lsm_info **ordered_lsms; @@ -155,15 +157,30 @@ static void __init maybe_initialize_lsm(struct lsm_info *lsm) } } -/* Populate ordered LSMs list from single LSM name. */ +/* Populate ordered LSMs list from comma-separated LSM name list. */ static void __init ordered_lsm_parse(const char *order, const char *origin) { struct lsm_info *lsm; + char *sep, *name, *next; + + sep = kstrdup(order, GFP_KERNEL); + next = sep; + /* Walk the list, looking for matching LSMs. */ + while ((name = strsep(&next, ",")) != NULL) { + bool found = false; + + for (lsm = __start_lsm_info; lsm < __end_lsm_info; lsm++) { + if ((lsm->flags & LSM_FLAG_LEGACY_MAJOR) == 0 && + strcmp(lsm->name, name) == 0) { + append_ordered_lsm(lsm, origin); + found = true; + } + } - for (lsm = __start_lsm_info; lsm < __end_lsm_info; lsm++) { - if (strcmp(lsm->name, order) == 0) - append_ordered_lsm(lsm, origin); + if (!found) + init_debug("%s ignored: %s\n", origin, name); } + kfree(sep); } static void __init ordered_lsm_init(void) @@ -173,7 +190,7 @@ static void __init ordered_lsm_init(void) ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms), GFP_KERNEL); - ordered_lsm_parse("integrity", "builtin"); + ordered_lsm_parse(builtin_lsm_order, "builtin"); for (lsm = ordered_lsms; *lsm; lsm++) maybe_initialize_lsm(*lsm); -- 2.17.1