summaryrefslogtreecommitdiffstats
path: root/security/security.c
diff options
context:
space:
mode:
authorKees Cook <keescook@chromium.org>2018-09-19 20:30:09 -0400
committerKees Cook <keescook@chromium.org>2019-01-08 16:18:42 -0500
commit79f7865d844c7703e3dc0e2f5b9ed2f3a4f412e5 (patch)
tree0e4804064ab81e886d5b9d0836abe27af5f155ed /security/security.c
parent13e735c0e953246bd531d342bb86acb5b1bf664a (diff)
LSM: Introduce "lsm=" for boottime LSM selection
Provide a way to explicitly choose LSM initialization order via the new "lsm=" comma-separated list of LSMs. Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'security/security.c')
-rw-r--r--security/security.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/security/security.c b/security/security.c
index 11a42cd313c5..2e1f48e8a6f2 100644
--- a/security/security.c
+++ b/security/security.c
@@ -47,6 +47,7 @@ char *lsm_names;
47/* Boot-time LSM user choice */ 47/* Boot-time LSM user choice */
48static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] = 48static __initdata char chosen_lsm[SECURITY_NAME_MAX + 1] =
49 CONFIG_DEFAULT_SECURITY; 49 CONFIG_DEFAULT_SECURITY;
50static __initdata const char *chosen_lsm_order;
50 51
51static __initconst const char * const builtin_lsm_order = CONFIG_LSM; 52static __initconst const char * const builtin_lsm_order = CONFIG_LSM;
52 53
@@ -190,7 +191,10 @@ static void __init ordered_lsm_init(void)
190 ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms), 191 ordered_lsms = kcalloc(LSM_COUNT + 1, sizeof(*ordered_lsms),
191 GFP_KERNEL); 192 GFP_KERNEL);
192 193
193 ordered_lsm_parse(builtin_lsm_order, "builtin"); 194 if (chosen_lsm_order)
195 ordered_lsm_parse(chosen_lsm_order, "cmdline");
196 else
197 ordered_lsm_parse(builtin_lsm_order, "builtin");
194 198
195 for (lsm = ordered_lsms; *lsm; lsm++) 199 for (lsm = ordered_lsms; *lsm; lsm++)
196 maybe_initialize_lsm(*lsm); 200 maybe_initialize_lsm(*lsm);
@@ -252,6 +256,14 @@ static int __init choose_lsm(char *str)
252} 256}
253__setup("security=", choose_lsm); 257__setup("security=", choose_lsm);
254 258
259/* Explicitly choose LSM initialization order. */
260static int __init choose_lsm_order(char *str)
261{
262 chosen_lsm_order = str;
263 return 1;
264}
265__setup("lsm=", choose_lsm_order);
266
255/* Enable LSM order debugging. */ 267/* Enable LSM order debugging. */
256static int __init enable_debug(char *str) 268static int __init enable_debug(char *str)
257{ 269{