From: Kees Cook <keescook@chromium.org>
To: James Morris <jmorris@namei.org>
Cc: Kees Cook <keescook@chromium.org>,
Casey Schaufler <casey@schaufler-ca.com>,
John Johansen <john.johansen@canonical.com>,
Stephen Smalley <sds@tycho.nsa.gov>,
Paul Moore <paul@paul-moore.com>,
Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
Mimi Zohar <zohar@linux.vnet.ibm.com>,
Randy Dunlap <rdunlap@infradead.org>,
Jordan Glover <Golden_Miller83@protonmail.ch>,
LSM <linux-security-module@vger.kernel.org>,
linux-doc@vger.kernel.org, linux-arch@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH security-next v5 05/30] LSM: Convert from initcall to struct lsm_info
Date: Wed, 10 Oct 2018 17:18:21 -0700 [thread overview]
Message-ID: <20181011001846.30964-6-keescook@chromium.org> (raw)
In-Reply-To: <20181011001846.30964-1-keescook@chromium.org>
In preparation for doing more interesting LSM init probing, this converts
the existing initcall system into an explicit call into a function pointer
from a section-collected struct lsm_info array.
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Casey Schaufler <casey@schaufler-ca.com>
Reviewed-by: James Morris <james.morris@microsoft.com>
Reviewed-by: John Johansen <john.johansen@canonical.com>
---
include/linux/init.h | 2 --
include/linux/lsm_hooks.h | 12 ++++++++++++
include/linux/module.h | 1 -
security/integrity/iint.c | 1 +
security/security.c | 14 +++++---------
5 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/include/linux/init.h b/include/linux/init.h
index 77636539e77c..9c2aba1dbabf 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -133,7 +133,6 @@ static inline initcall_t initcall_from_entry(initcall_entry_t *entry)
#endif
extern initcall_entry_t __con_initcall_start[], __con_initcall_end[];
-extern initcall_entry_t __start_lsm_info[], __end_lsm_info[];
/* Used for contructor calls. */
typedef void (*ctor_fn_t)(void);
@@ -236,7 +235,6 @@ extern bool initcall_debug;
static exitcall_t __exitcall_##fn __exit_call = fn
#define console_initcall(fn) ___define_initcall(fn,, .con_initcall)
-#define security_initcall(fn) ___define_initcall(fn,, .lsm_info)
struct obs_kernel_param {
const char *str;
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
index 97a020c616ad..d13059feca09 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -2039,6 +2039,18 @@ extern char *lsm_names;
extern void security_add_hooks(struct security_hook_list *hooks, int count,
char *lsm);
+struct lsm_info {
+ int (*init)(void); /* Required. */
+};
+
+extern struct lsm_info __start_lsm_info[], __end_lsm_info[];
+
+#define security_initcall(lsm) \
+ static struct lsm_info __lsm_##lsm \
+ __used __section(.lsm_info.init) \
+ __aligned(sizeof(unsigned long)) \
+ = { .init = lsm, }
+
#ifdef CONFIG_SECURITY_SELINUX_DISABLE
/*
* Assuring the safety of deleting a security module is up to
diff --git a/include/linux/module.h b/include/linux/module.h
index f807f15bebbe..264979283756 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -123,7 +123,6 @@ extern void cleanup_module(void);
#define late_initcall_sync(fn) module_init(fn)
#define console_initcall(fn) module_init(fn)
-#define security_initcall(fn) module_init(fn)
/* Each module must use one module_init(). */
#define module_init(initfn) \
diff --git a/security/integrity/iint.c b/security/integrity/iint.c
index 5a6810041e5c..70d21b566955 100644
--- a/security/integrity/iint.c
+++ b/security/integrity/iint.c
@@ -22,6 +22,7 @@
#include <linux/file.h>
#include <linux/uaccess.h>
#include <linux/security.h>
+#include <linux/lsm_hooks.h>
#include "integrity.h"
static struct rb_root integrity_iint_tree = RB_ROOT;
diff --git a/security/security.c b/security/security.c
index 41a5da2c7faf..e74f46fba591 100644
--- a/security/security.c
+++ b/security/security.c
@@ -43,16 +43,12 @@ char *lsm_names;
static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] =
CONFIG_DEFAULT_SECURITY;
-static void __init do_security_initcalls(void)
+static void __init major_lsm_init(void)
{
- initcall_t call;
- initcall_entry_t *ce;
+ struct lsm_info *lsm;
- ce = __start_lsm_info;
- while (ce < __end_lsm_info) {
- call = initcall_from_entry(ce);
- call();
- ce++;
+ for (lsm = __start_lsm_info; lsm < __end_lsm_info; lsm++) {
+ lsm->init();
}
}
@@ -82,7 +78,7 @@ int __init security_init(void)
/*
* Load all the remaining security modules.
*/
- do_security_initcalls();
+ major_lsm_init();
return 0;
}
--
2.17.1
next prev parent reply other threads:[~2018-10-11 0:18 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-11 0:18 [PATCH security-next v5 00/30] LSM: Explict ordering Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 01/30] LSM: Correctly announce start of LSM initialization Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 02/30] vmlinux.lds.h: Avoid copy/paste of security_init section Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 03/30] LSM: Rename .security_initcall section to .lsm_info Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 04/30] LSM: Remove initcall tracing Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` Kees Cook [this message]
2018-10-11 0:18 ` [PATCH security-next v5 05/30] LSM: Convert from initcall to struct lsm_info Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 06/30] vmlinux.lds.h: Move LSM_TABLE into INIT_DATA Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 07/30] LSM: Convert security_initcall() into DEFINE_LSM() Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 08/30] LSM: Record LSM name in struct lsm_info Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 09/30] LSM: Provide init debugging infrastructure Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 10/30] LSM: Don't ignore initialization failures Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 11/30] LSM: Introduce LSM_FLAG_LEGACY_MAJOR Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 12/30] LSM: Provide separate ordered initialization Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-11-02 18:13 ` Mimi Zohar
2018-11-02 18:13 ` Mimi Zohar
2018-11-02 20:49 ` Kees Cook
2018-11-02 20:49 ` Kees Cook
2018-11-05 14:13 ` Mimi Zohar
2018-11-05 14:13 ` Mimi Zohar
2018-10-11 0:18 ` [PATCH security-next v5 13/30] LoadPin: Rename boot param "enabled" to "enforce" Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 14/30] LSM: Plumb visibility into optional "enabled" state Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 15/30] LSM: Lift LSM selection out of individual LSMs Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 16/30] LSM: Build ordered list of LSMs to initialize Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 17/30] LSM: Introduce CONFIG_LSM Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 18/30] LSM: Introduce "lsm=" for boottime LSM selection Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 19/30] LSM: Tie enabling logic to presence in ordered list Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 20/30] LSM: Prepare for reorganizing "security=" logic Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 21/30] LSM: Refactor "security=" in terms of enable/disable Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 22/30] LSM: Separate idea of "major" LSM from "exclusive" LSM Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 23/30] apparmor: Remove SECURITY_APPARMOR_BOOTPARAM_VALUE Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 24/30] selinux: Remove SECURITY_SELINUX_BOOTPARAM_VALUE Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 25/30] LSM: Add all exclusive LSMs to ordered initialization Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 26/30] LSM: Split LSM preparation from initialization Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 27/30] LoadPin: Initialize as ordered LSM Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 28/30] Yama: " Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 29/30] LSM: Introduce enum lsm_order Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 0:18 ` [PATCH security-next v5 30/30] capability: Initialize as LSM_ORDER_FIRST Kees Cook
2018-10-11 0:18 ` Kees Cook
2018-10-11 3:45 ` [PATCH security-next v5 00/30] LSM: Explict ordering James Morris
2018-10-11 3:45 ` James Morris
2018-10-11 15:14 ` Kees Cook
2018-10-11 15:14 ` Kees Cook
2018-10-11 15:52 ` James Morris
2018-10-11 15:52 ` James Morris
2018-10-11 17:57 ` Kees Cook
2018-10-11 17:57 ` Kees Cook
2018-10-11 22:58 ` Jordan Glover
2018-10-11 22:58 ` Jordan Glover
2018-10-11 23:09 ` Kees Cook
2018-10-11 23:09 ` Kees Cook
2018-10-11 23:48 ` John Johansen
2018-10-11 23:48 ` John Johansen
2018-10-12 0:11 ` Jordan Glover
2018-10-12 0:11 ` Jordan Glover
2018-10-12 1:19 ` John Johansen
2018-10-12 1:19 ` John Johansen
2018-10-12 11:31 ` Jordan Glover
2018-10-12 11:31 ` Jordan Glover
2018-10-12 18:24 ` John Johansen
2018-10-12 18:24 ` John Johansen
2018-10-12 19:01 ` Kees Cook
2018-10-12 19:01 ` Kees Cook
2018-10-23 16:48 ` Casey Schaufler
2018-10-23 16:48 ` Casey Schaufler
2018-10-23 18:50 ` Kees Cook
2018-10-23 18:50 ` Kees Cook
2018-10-23 19:05 ` Casey Schaufler
2018-10-24 8:56 ` Casey Schaufler
2018-10-24 20:12 ` Kees Cook
2018-11-14 21:04 ` Casey Schaufler
2018-11-20 23:36 ` Casey Schaufler
2018-10-11 23:53 ` Jordan Glover
2018-10-11 23:53 ` Jordan Glover
2018-10-12 0:26 ` John Johansen
2018-10-12 0:26 ` John Johansen
2018-10-12 11:31 ` Jordan Glover
2018-10-12 11:31 ` Jordan Glover
2018-10-12 18:11 ` John Johansen
2018-10-12 18:11 ` John Johansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181011001846.30964-6-keescook@chromium.org \
--to=keescook@chromium.org \
--cc=Golden_Miller83@protonmail.ch \
--cc=casey@schaufler-ca.com \
--cc=jmorris@namei.org \
--cc=john.johansen@canonical.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=penguin-kernel@i-love.sakura.ne.jp \
--cc=rdunlap@infradead.org \
--cc=sds@tycho.nsa.gov \
--cc=zohar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).