diff options
Diffstat (limited to 'security/smack/smack.h')
-rw-r--r-- | security/smack/smack.h | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/security/smack/smack.h b/security/smack/smack.h index b8c1a869d85e..244e035e5a99 100644 --- a/security/smack/smack.h +++ b/security/smack/smack.h | |||
@@ -138,6 +138,11 @@ struct smk_port_label { | |||
138 | struct smack_known *smk_out; /* outgoing label */ | 138 | struct smack_known *smk_out; /* outgoing label */ |
139 | }; | 139 | }; |
140 | 140 | ||
141 | struct smack_onlycap { | ||
142 | struct list_head list; | ||
143 | struct smack_known *smk_label; | ||
144 | }; | ||
145 | |||
141 | /* | 146 | /* |
142 | * Mount options | 147 | * Mount options |
143 | */ | 148 | */ |
@@ -249,6 +254,7 @@ int smk_netlbl_mls(int, char *, struct netlbl_lsm_secattr *, int); | |||
249 | struct smack_known *smk_import_entry(const char *, int); | 254 | struct smack_known *smk_import_entry(const char *, int); |
250 | void smk_insert_entry(struct smack_known *skp); | 255 | void smk_insert_entry(struct smack_known *skp); |
251 | struct smack_known *smk_find_entry(const char *); | 256 | struct smack_known *smk_find_entry(const char *); |
257 | int smack_privileged(int cap); | ||
252 | 258 | ||
253 | /* | 259 | /* |
254 | * Shared data. | 260 | * Shared data. |
@@ -257,7 +263,6 @@ extern int smack_enabled; | |||
257 | extern int smack_cipso_direct; | 263 | extern int smack_cipso_direct; |
258 | extern int smack_cipso_mapped; | 264 | extern int smack_cipso_mapped; |
259 | extern struct smack_known *smack_net_ambient; | 265 | extern struct smack_known *smack_net_ambient; |
260 | extern struct smack_known *smack_onlycap; | ||
261 | extern struct smack_known *smack_syslog_label; | 266 | extern struct smack_known *smack_syslog_label; |
262 | #ifdef CONFIG_SECURITY_SMACK_BRINGUP | 267 | #ifdef CONFIG_SECURITY_SMACK_BRINGUP |
263 | extern struct smack_known *smack_unconfined; | 268 | extern struct smack_known *smack_unconfined; |
@@ -276,6 +281,9 @@ extern struct mutex smack_known_lock; | |||
276 | extern struct list_head smack_known_list; | 281 | extern struct list_head smack_known_list; |
277 | extern struct list_head smk_netlbladdr_list; | 282 | extern struct list_head smk_netlbladdr_list; |
278 | 283 | ||
284 | extern struct mutex smack_onlycap_lock; | ||
285 | extern struct list_head smack_onlycap_list; | ||
286 | |||
279 | #define SMACK_HASH_SLOTS 16 | 287 | #define SMACK_HASH_SLOTS 16 |
280 | extern struct hlist_head smack_known_hash[SMACK_HASH_SLOTS]; | 288 | extern struct hlist_head smack_known_hash[SMACK_HASH_SLOTS]; |
281 | 289 | ||
@@ -332,21 +340,6 @@ static inline struct smack_known *smk_of_current(void) | |||
332 | } | 340 | } |
333 | 341 | ||
334 | /* | 342 | /* |
335 | * Is the task privileged and allowed to be privileged | ||
336 | * by the onlycap rule. | ||
337 | */ | ||
338 | static inline int smack_privileged(int cap) | ||
339 | { | ||
340 | struct smack_known *skp = smk_of_current(); | ||
341 | |||
342 | if (!capable(cap)) | ||
343 | return 0; | ||
344 | if (smack_onlycap == NULL || smack_onlycap == skp) | ||
345 | return 1; | ||
346 | return 0; | ||
347 | } | ||
348 | |||
349 | /* | ||
350 | * logging functions | 343 | * logging functions |
351 | */ | 344 | */ |
352 | #define SMACK_AUDIT_DENIED 0x1 | 345 | #define SMACK_AUDIT_DENIED 0x1 |