1010
1111#include "lsm.h"
1212
13+ /* LSM enabled constants. */
14+ static __initdata int lsm_enabled_true = 1 ;
15+ static __initdata int lsm_enabled_false = 0 ;
16+
1317/* Pointers to LSM sections defined in include/asm-generic/vmlinux.lds.h */
1418extern struct lsm_info __start_lsm_info [], __end_lsm_info [];
1519extern struct lsm_info __start_early_lsm_info [], __end_early_lsm_info [];
@@ -75,37 +79,33 @@ static int __init lsm_debug_enable(char *str)
7579}
7680__setup ("lsm.debug" , lsm_debug_enable );
7781
78- /* Mark an LSM's enabled flag. */
79- static int lsm_enabled_true __initdata = 1 ;
80- static int lsm_enabled_false __initdata = 0 ;
81- static void __init set_enabled (struct lsm_info * lsm , bool enabled )
82+ /**
83+ * lsm_enabled_set - Mark a LSM as enabled
84+ * @lsm: LSM definition
85+ * @enabled: enabled flag
86+ */
87+ static void __init lsm_enabled_set (struct lsm_info * lsm , bool enabled )
8288{
8389 /*
8490 * When an LSM hasn't configured an enable variable, we can use
8591 * a hard-coded location for storing the default enabled state.
8692 */
87- if (!lsm -> enabled ) {
88- if (enabled )
89- lsm -> enabled = & lsm_enabled_true ;
90- else
91- lsm -> enabled = & lsm_enabled_false ;
92- } else if (lsm -> enabled == & lsm_enabled_true ) {
93- if (!enabled )
94- lsm -> enabled = & lsm_enabled_false ;
95- } else if (lsm -> enabled == & lsm_enabled_false ) {
96- if (enabled )
97- lsm -> enabled = & lsm_enabled_true ;
93+ if (!lsm -> enabled ||
94+ lsm -> enabled == & lsm_enabled_true ||
95+ lsm -> enabled == & lsm_enabled_false ) {
96+ lsm -> enabled = enabled ? & lsm_enabled_true : & lsm_enabled_false ;
9897 } else {
9998 * lsm -> enabled = enabled ;
10099 }
101100}
102101
103- static inline bool is_enabled (struct lsm_info * lsm )
102+ /**
103+ * lsm_is_enabled - Determine if a LSM is enabled
104+ * @lsm: LSM definition
105+ */
106+ static inline bool lsm_is_enabled (struct lsm_info * lsm )
104107{
105- if (!lsm -> enabled )
106- return false;
107-
108- return * lsm -> enabled ;
108+ return (lsm -> enabled ? * lsm -> enabled : false);
109109}
110110
111111/* Is an LSM already listed in the ordered LSMs list? */
@@ -139,7 +139,7 @@ static void __init append_ordered_lsm(struct lsm_info *lsm, const char *from)
139139 lsm_idlist [last_lsm ++ ] = lsm -> id ;
140140
141141 init_debug ("%s ordered: %s (%s)\n" , from , lsm -> id -> name ,
142- is_enabled (lsm ) ? "enabled" : "disabled" );
142+ lsm_is_enabled (lsm ) ? "enabled" : "disabled" );
143143}
144144
145145static void __init lsm_set_blob_size (int * need , int * lbs )
@@ -162,17 +162,17 @@ static void __init lsm_prepare(struct lsm_info *lsm)
162162{
163163 struct lsm_blob_sizes * blobs ;
164164
165- if (!is_enabled (lsm )) {
166- set_enabled (lsm , false);
165+ if (!lsm_is_enabled (lsm )) {
166+ lsm_enabled_set (lsm , false);
167167 return ;
168168 } else if ((lsm -> flags & LSM_FLAG_EXCLUSIVE ) && lsm_exclusive ) {
169169 init_debug ("exclusive disabled: %s\n" , lsm -> id -> name );
170- set_enabled (lsm , false);
170+ lsm_enabled_set (lsm , false);
171171 return ;
172172 }
173173
174174 /* Mark the LSM as enabled. */
175- set_enabled (lsm , true);
175+ lsm_enabled_set (lsm , true);
176176 if ((lsm -> flags & LSM_FLAG_EXCLUSIVE ) && !lsm_exclusive ) {
177177 init_debug ("exclusive chosen: %s\n" , lsm -> id -> name );
178178 lsm_exclusive = lsm ;
@@ -206,7 +206,7 @@ static void __init lsm_prepare(struct lsm_info *lsm)
206206/* Initialize a given LSM, if it is enabled. */
207207static void __init initialize_lsm (struct lsm_info * lsm )
208208{
209- if (is_enabled (lsm )) {
209+ if (lsm_is_enabled (lsm )) {
210210 int ret ;
211211
212212 init_debug ("initializing %s\n" , lsm -> id -> name );
@@ -240,7 +240,7 @@ static void __init ordered_lsm_parse(const char *order, const char *origin)
240240 lsm_for_each_raw (major ) {
241241 if ((major -> flags & LSM_FLAG_LEGACY_MAJOR ) &&
242242 strcmp (major -> id -> name , lsm_order_legacy ) != 0 ) {
243- set_enabled (major , false);
243+ lsm_enabled_set (major , false);
244244 init_debug ("security=%s disabled: %s (only one legacy major LSM)\n" ,
245245 lsm_order_legacy , major -> id -> name );
246246 }
@@ -286,7 +286,7 @@ static void __init ordered_lsm_parse(const char *order, const char *origin)
286286 lsm_for_each_raw (lsm ) {
287287 if (exists_ordered_lsm (lsm ))
288288 continue ;
289- set_enabled (lsm , false);
289+ lsm_enabled_set (lsm , false);
290290 init_debug ("%s skipped: %s (not in requested order)\n" ,
291291 origin , lsm -> id -> name );
292292 }
@@ -319,12 +319,12 @@ static void __init lsm_init_ordered(void)
319319
320320 pr_info ("initializing lsm=" );
321321 lsm_early_for_each_raw (early ) {
322- if (is_enabled (early ))
322+ if (lsm_is_enabled (early ))
323323 pr_cont ("%s%s" ,
324324 first ++ == 0 ? "" : "," , early -> id -> name );
325325 }
326326 lsm_order_for_each (lsm ) {
327- if (is_enabled (* lsm ))
327+ if (lsm_is_enabled (* lsm ))
328328 pr_cont ("%s%s" ,
329329 first ++ == 0 ? "" : "," , (* lsm )-> id -> name );
330330 }
@@ -440,7 +440,7 @@ int __init security_init(void)
440440 */
441441 lsm_early_for_each_raw (lsm ) {
442442 init_debug (" early started: %s (%s)\n" , lsm -> id -> name ,
443- is_enabled (lsm ) ? "enabled" : "disabled" );
443+ lsm_is_enabled (lsm ) ? "enabled" : "disabled" );
444444 }
445445
446446 /* Load LSMs in specified order. */
0 commit comments