diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 10 | 
1 files changed, 8 insertions, 2 deletions
| diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 10350534de6d..2aa0e219d721 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2775,14 +2775,20 @@ static int selinux_umount(struct vfsmount *mnt, int flags)  static int selinux_fs_context_submount(struct fs_context *fc,  				   struct super_block *reference)  { -	const struct superblock_security_struct *sbsec; +	const struct superblock_security_struct *sbsec = selinux_superblock(reference);  	struct selinux_mnt_opts *opts; +	/* +	 * Ensure that fc->security remains NULL when no options are set +	 * as expected by selinux_set_mnt_opts(). +	 */ +	if (!(sbsec->flags & (FSCONTEXT_MNT|CONTEXT_MNT|DEFCONTEXT_MNT))) +		return 0; +  	opts = kzalloc(sizeof(*opts), GFP_KERNEL);  	if (!opts)  		return -ENOMEM; -	sbsec = selinux_superblock(reference);  	if (sbsec->flags & FSCONTEXT_MNT)  		opts->fscontext_sid = sbsec->sid;  	if (sbsec->flags & CONTEXT_MNT) | 
