Thread (42 messages) 42 messages, 5 authors, 2018-09-18

[PATCH 11/18] LSM: Lift LSM selection out of individual LSMs

From: Kees Cook <hidden>
Date: 2018-09-16 01:47:37
Also in: lkml

On Sat, Sep 15, 2018 at 6:32 PM, Jann Horn [off-list ref] wrote:
On Sun, Sep 16, 2018 at 3:14 AM Kees Cook [off-list ref] wrote:
quoted
In order to adjust LSM selection logic in the future, this moves the
selection logic up out of the individual LSMs, making their init functions
only run when actually enabled.
[...]
quoted
+/* Is an LSM allowed to be enabled? */
+static bool __init lsm_enabled(struct lsm_info *lsm)
+{
+       /* Report explicit disabling. */
+       if (lsm->enabled && !*lsm->enabled) {
+               pr_info("%s disabled with boot parameter\n", lsm->name);
+               return false;
+       }
+
+       /* If LSM isn't exclusive, ignore exclusive LSM selection rules. */
+       if (lsm->type != LSM_TYPE_EXCLUSIVE)
+               return true;
+
+       /* Disabled if another exclusive LSM already selected. */
+       if (exclusive)
+               return false;
What is this check for, given that you have the strcmp() just below
here? From a quick look, it (together with everything else that
touches the "exclusive" variable) seems superfluous to me, unless
there are two LSMs with the same name (which really shouldn't happen,
right?).
quoted
+       /* Disabled if this LSM isn't the chosen one. */
+       if (strcmp(lsm->name, chosen_lsm) != 0)
+               return false;
+
+       return true;
+}
Mainly it's for composition with later patches where the name check is
moved. It seemed easier to explain the logical progression with the
hunk here.

-Kees

-- 
Kees Cook
Pixel Security
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help