diff options
author | Ahmed S. Darwish <darwish.07@gmail.com> | 2008-03-06 11:09:10 -0500 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2008-04-18 20:00:51 -0400 |
commit | 076c54c5bcaed2081c0cba94a6f77c4d470236ad (patch) | |
tree | 5e8f05cab20a49922618bb3af697a6b46e610eee /security/selinux | |
parent | 04305e4aff8b0533dc05f9f6f1a34d0796bd985f (diff) |
Security: Introduce security= boot parameter
Add the security= boot parameter. This is done to avoid LSM
registration clashes in case of more than one bult-in module.
User can choose a security module to enable at boot. If no
security= boot parameter is specified, only the first LSM
asking for registration will be loaded. An invalid security
module name will be treated as if no module has been chosen.
LSM modules must check now if they are allowed to register
by calling security_module_enable(ops) first. Modify SELinux
and SMACK to do so.
Do not let SMACK register smackfs if it was not chosen on
boot. Smackfs assumes that smack hooks are registered and
the initial task security setup (swapper->security) is done.
Signed-off-by: Ahmed S. Darwish <darwish.07@gmail.com>
Acked-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security/selinux')
-rw-r--r-- | security/selinux/hooks.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index a2f7e9cf78c5..f9927f02bc3d 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -5295,6 +5295,8 @@ static int selinux_key_permission(key_ref_t key_ref, | |||
5295 | #endif | 5295 | #endif |
5296 | 5296 | ||
5297 | static struct security_operations selinux_ops = { | 5297 | static struct security_operations selinux_ops = { |
5298 | .name = "selinux", | ||
5299 | |||
5298 | .ptrace = selinux_ptrace, | 5300 | .ptrace = selinux_ptrace, |
5299 | .capget = selinux_capget, | 5301 | .capget = selinux_capget, |
5300 | .capset_check = selinux_capset_check, | 5302 | .capset_check = selinux_capset_check, |
@@ -5492,6 +5494,11 @@ static __init int selinux_init(void) | |||
5492 | { | 5494 | { |
5493 | struct task_security_struct *tsec; | 5495 | struct task_security_struct *tsec; |
5494 | 5496 | ||
5497 | if (!security_module_enable(&selinux_ops)) { | ||
5498 | selinux_enabled = 0; | ||
5499 | return 0; | ||
5500 | } | ||
5501 | |||
5495 | if (!selinux_enabled) { | 5502 | if (!selinux_enabled) { |
5496 | printk(KERN_INFO "SELinux: Disabled at boot.\n"); | 5503 | printk(KERN_INFO "SELinux: Disabled at boot.\n"); |
5497 | return 0; | 5504 | return 0; |