smack: move initcalls to the LSM framework

As the LSM framework only supports one LSM initcall callback for each
initcall type, the init_smk_fs() and smack_nf_ip_init() functions were
wrapped with a new function, smack_initcall() that is registered with
the LSM framework.

Acked-by: Casey Schaufler <casey@schaufler-ca.com>
Reviewed-by: John Johansen <john.johhansen@canonical.com>
Signed-off-by: Paul Moore <paul@paul-moore.com>
This commit is contained in:
Paul Moore
2025-02-18 17:22:31 -05:00
parent d934f97db8
commit 06643d5584
4 changed files with 25 additions and 6 deletions

View File

@@ -275,6 +275,20 @@ struct smk_audit_info {
#endif
};
/*
* Initialization
*/
#if defined(CONFIG_SECURITY_SMACK_NETFILTER)
int smack_nf_ip_init(void);
#else
static inline int smack_nf_ip_init(void)
{
return 0;
}
#endif
int init_smk_fs(void);
int smack_initcall(void);
/*
* These functions are in smack_access.c
*/

View File

@@ -5275,6 +5275,14 @@ static __init int smack_init(void)
return 0;
}
int __init smack_initcall(void)
{
int rc_fs = init_smk_fs();
int rc_nf = smack_nf_ip_init();
return rc_fs ? rc_fs : rc_nf;
}
/*
* Smack requires early initialization in order to label
* all processes and objects when they are created.
@@ -5284,4 +5292,5 @@ DEFINE_LSM(smack) = {
.flags = LSM_FLAG_LEGACY_MAJOR | LSM_FLAG_EXCLUSIVE,
.blobs = &smack_blob_sizes,
.init = smack_init,
.initcall_device = smack_initcall,
};

View File

@@ -68,7 +68,7 @@ static struct pernet_operations smack_net_ops = {
.exit = smack_nf_unregister,
};
static int __init smack_nf_ip_init(void)
int __init smack_nf_ip_init(void)
{
if (smack_enabled == 0)
return 0;
@@ -76,5 +76,3 @@ static int __init smack_nf_ip_init(void)
printk(KERN_DEBUG "Smack: Registering netfilter hooks\n");
return register_pernet_subsys(&smack_net_ops);
}
__initcall(smack_nf_ip_init);

View File

@@ -2978,7 +2978,7 @@ static struct vfsmount *smackfs_mount;
* Returns true if we were not chosen on boot or if
* we were chosen and filesystem registration succeeded.
*/
static int __init init_smk_fs(void)
int __init init_smk_fs(void)
{
int err;
int rc;
@@ -3021,5 +3021,3 @@ static int __init init_smk_fs(void)
return err;
}
__initcall(init_smk_fs);