Smack: move label list initialization
A kernel with Smack enabled will fail if tmpfs has xattr support. Move the initialization of predefined Smack label list entries to the LSM initialization from the smackfs setup. This became an issue when tmpfs acquired xattr support, but was never correct. Signed-off-by: Casey Schaufler <casey@schaufler-ca.com> Signed-off-by: James Morris <james.l.morris@oracle.com>
This commit is contained in:
parent
592fe89806
commit
86812bb0de
2 changed files with 33 additions and 25 deletions
|
@ -3640,8 +3640,38 @@ struct security_operations smack_ops = {
|
|||
};
|
||||
|
||||
|
||||
static __init void init_smack_know_list(void)
|
||||
static __init void init_smack_known_list(void)
|
||||
{
|
||||
/*
|
||||
* Initialize CIPSO locks
|
||||
*/
|
||||
spin_lock_init(&smack_known_huh.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_hat.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_star.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_floor.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_invalid.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_web.smk_cipsolock);
|
||||
/*
|
||||
* Initialize rule list locks
|
||||
*/
|
||||
mutex_init(&smack_known_huh.smk_rules_lock);
|
||||
mutex_init(&smack_known_hat.smk_rules_lock);
|
||||
mutex_init(&smack_known_floor.smk_rules_lock);
|
||||
mutex_init(&smack_known_star.smk_rules_lock);
|
||||
mutex_init(&smack_known_invalid.smk_rules_lock);
|
||||
mutex_init(&smack_known_web.smk_rules_lock);
|
||||
/*
|
||||
* Initialize rule lists
|
||||
*/
|
||||
INIT_LIST_HEAD(&smack_known_huh.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_hat.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_star.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_floor.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_invalid.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_web.smk_rules);
|
||||
/*
|
||||
* Create the known labels list
|
||||
*/
|
||||
list_add(&smack_known_huh.list, &smack_known_list);
|
||||
list_add(&smack_known_hat.list, &smack_known_list);
|
||||
list_add(&smack_known_star.list, &smack_known_list);
|
||||
|
@ -3676,16 +3706,8 @@ static __init int smack_init(void)
|
|||
cred = (struct cred *) current->cred;
|
||||
cred->security = tsp;
|
||||
|
||||
/* initialize the smack_know_list */
|
||||
init_smack_know_list();
|
||||
/*
|
||||
* Initialize locks
|
||||
*/
|
||||
spin_lock_init(&smack_known_huh.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_hat.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_star.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_floor.smk_cipsolock);
|
||||
spin_lock_init(&smack_known_invalid.smk_cipsolock);
|
||||
/* initialize the smack_known_list */
|
||||
init_smack_known_list();
|
||||
|
||||
/*
|
||||
* Register with LSM
|
||||
|
|
|
@ -1614,20 +1614,6 @@ static int __init init_smk_fs(void)
|
|||
smk_cipso_doi();
|
||||
smk_unlbl_ambient(NULL);
|
||||
|
||||
mutex_init(&smack_known_floor.smk_rules_lock);
|
||||
mutex_init(&smack_known_hat.smk_rules_lock);
|
||||
mutex_init(&smack_known_huh.smk_rules_lock);
|
||||
mutex_init(&smack_known_invalid.smk_rules_lock);
|
||||
mutex_init(&smack_known_star.smk_rules_lock);
|
||||
mutex_init(&smack_known_web.smk_rules_lock);
|
||||
|
||||
INIT_LIST_HEAD(&smack_known_floor.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_hat.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_huh.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_invalid.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_star.smk_rules);
|
||||
INIT_LIST_HEAD(&smack_known_web.smk_rules);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue