selinux: expand superblock_doinit() calls
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Reviewed-by: David Howells <dhowells@redhat.com>
This commit is contained in:
Родитель
43f5e655ef
Коммит
17f3b556a3
|
@ -1202,33 +1202,6 @@ out_err:
|
|||
kfree(rootcontext);
|
||||
return rc;
|
||||
}
|
||||
/*
|
||||
* string mount options parsing and call set the sbsec
|
||||
*/
|
||||
static int superblock_doinit(struct super_block *sb, void *data)
|
||||
{
|
||||
int rc = 0;
|
||||
char *options = data;
|
||||
struct security_mnt_opts opts;
|
||||
|
||||
security_init_mnt_opts(&opts);
|
||||
|
||||
if (!data)
|
||||
goto out;
|
||||
|
||||
BUG_ON(sb->s_type->fs_flags & FS_BINARY_MOUNTDATA);
|
||||
|
||||
rc = selinux_parse_opts_str(options, &opts);
|
||||
if (rc)
|
||||
goto out_err;
|
||||
|
||||
out:
|
||||
rc = selinux_set_mnt_opts(sb, &opts, 0, NULL);
|
||||
|
||||
out_err:
|
||||
security_free_mnt_opts(&opts);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void selinux_write_opts(struct seq_file *m,
|
||||
struct security_mnt_opts *opts)
|
||||
|
@ -2926,11 +2899,28 @@ out_bad_option:
|
|||
|
||||
static int selinux_sb_kern_mount(struct super_block *sb, int flags, void *data)
|
||||
{
|
||||
char *options = data;
|
||||
const struct cred *cred = current_cred();
|
||||
struct common_audit_data ad;
|
||||
int rc;
|
||||
int rc = 0;
|
||||
struct security_mnt_opts opts;
|
||||
|
||||
rc = superblock_doinit(sb, data);
|
||||
security_init_mnt_opts(&opts);
|
||||
|
||||
if (!data)
|
||||
goto out;
|
||||
|
||||
BUG_ON(sb->s_type->fs_flags & FS_BINARY_MOUNTDATA);
|
||||
|
||||
rc = selinux_parse_opts_str(options, &opts);
|
||||
if (rc)
|
||||
goto out_err;
|
||||
|
||||
out:
|
||||
rc = selinux_set_mnt_opts(sb, &opts, 0, NULL);
|
||||
|
||||
out_err:
|
||||
security_free_mnt_opts(&opts);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
@ -7194,7 +7184,11 @@ static __init int selinux_init(void)
|
|||
|
||||
static void delayed_superblock_init(struct super_block *sb, void *unused)
|
||||
{
|
||||
superblock_doinit(sb, NULL);
|
||||
struct security_mnt_opts opts;
|
||||
|
||||
security_init_mnt_opts(&opts);
|
||||
selinux_set_mnt_opts(sb, &opts, 0, NULL);
|
||||
security_free_mnt_opts(&opts);
|
||||
}
|
||||
|
||||
void selinux_complete_init(void)
|
||||
|
|
Загрузка…
Ссылка в новой задаче