LSM: Refactor "security=" in terms of enable/disable
For what are marked as the Legacy Major LSMs, make them effectively exclusive when selected on the "security=" boot parameter, to handle the future case of when a previously major LSMs become non-exclusive (e.g. when TOMOYO starts blob-sharing). Signed-off-by: Kees Cook <keescook@chromium.org> Reviewed-by: Casey Schaufler <casey@schaufler-ca.com>
This commit is contained in:
parent
5ef4e41918
commit
7e611486d9
|
@ -129,14 +129,6 @@ static bool __init lsm_allowed(struct lsm_info *lsm)
|
||||||
if (!is_enabled(lsm))
|
if (!is_enabled(lsm))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Skip major-specific checks if not a major LSM. */
|
|
||||||
if ((lsm->flags & LSM_FLAG_LEGACY_MAJOR) == 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
/* Disabled if this LSM isn't the chosen one. */
|
|
||||||
if (strcmp(lsm->name, chosen_major_lsm) != 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,8 +156,28 @@ static void __init ordered_lsm_parse(const char *order, const char *origin)
|
||||||
struct lsm_info *lsm;
|
struct lsm_info *lsm;
|
||||||
char *sep, *name, *next;
|
char *sep, *name, *next;
|
||||||
|
|
||||||
|
/* Process "security=", if given. */
|
||||||
if (!chosen_major_lsm)
|
if (!chosen_major_lsm)
|
||||||
chosen_major_lsm = CONFIG_DEFAULT_SECURITY;
|
chosen_major_lsm = CONFIG_DEFAULT_SECURITY;
|
||||||
|
if (chosen_major_lsm) {
|
||||||
|
struct lsm_info *major;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To match the original "security=" behavior, this
|
||||||
|
* explicitly does NOT fallback to another Legacy Major
|
||||||
|
* if the selected one was separately disabled: disable
|
||||||
|
* all non-matching Legacy Major LSMs.
|
||||||
|
*/
|
||||||
|
for (major = __start_lsm_info; major < __end_lsm_info;
|
||||||
|
major++) {
|
||||||
|
if ((major->flags & LSM_FLAG_LEGACY_MAJOR) &&
|
||||||
|
strcmp(major->name, chosen_major_lsm) != 0) {
|
||||||
|
set_enabled(major, false);
|
||||||
|
init_debug("security=%s disabled: %s\n",
|
||||||
|
chosen_major_lsm, major->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sep = kstrdup(order, GFP_KERNEL);
|
sep = kstrdup(order, GFP_KERNEL);
|
||||||
next = sep;
|
next = sep;
|
||||||
|
|
Loading…
Reference in New Issue