|
@@ -354,6 +354,29 @@ static int may_context_mount_inode_relabel(u32 sid,
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+static int selinux_is_sblabel_mnt(struct super_block *sb)
|
|
|
+{
|
|
|
+ struct superblock_security_struct *sbsec = sb->s_security;
|
|
|
+
|
|
|
+ if (sbsec->behavior == SECURITY_FS_USE_XATTR ||
|
|
|
+ sbsec->behavior == SECURITY_FS_USE_TRANS ||
|
|
|
+ sbsec->behavior == SECURITY_FS_USE_TASK)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ /* Special handling for sysfs. Is genfs but also has setxattr handler*/
|
|
|
+ if (strncmp(sb->s_type->name, "sysfs", sizeof("sysfs")) == 0)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Special handling for rootfs. Is genfs but supports
|
|
|
+ * setting SELinux context on in-core inodes.
|
|
|
+ */
|
|
|
+ if (strncmp(sb->s_type->name, "rootfs", sizeof("rootfs")) == 0)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int sb_finish_set_opts(struct super_block *sb)
|
|
|
{
|
|
|
struct superblock_security_struct *sbsec = sb->s_security;
|
|
@@ -396,20 +419,7 @@ static int sb_finish_set_opts(struct super_block *sb)
|
|
|
labeling_behaviors[sbsec->behavior-1]);
|
|
|
|
|
|
sbsec->flags |= SE_SBINITIALIZED;
|
|
|
- if (sbsec->behavior == SECURITY_FS_USE_XATTR ||
|
|
|
- sbsec->behavior == SECURITY_FS_USE_TRANS ||
|
|
|
- sbsec->behavior == SECURITY_FS_USE_TASK)
|
|
|
- sbsec->flags |= SBLABEL_MNT;
|
|
|
-
|
|
|
- /* Special handling for sysfs. Is genfs but also has setxattr handler*/
|
|
|
- if (strncmp(sb->s_type->name, "sysfs", sizeof("sysfs")) == 0)
|
|
|
- sbsec->flags |= SBLABEL_MNT;
|
|
|
-
|
|
|
- /*
|
|
|
- * Special handling for rootfs. Is genfs but supports
|
|
|
- * setting SELinux context on in-core inodes.
|
|
|
- */
|
|
|
- if (strncmp(sb->s_type->name, "rootfs", sizeof("rootfs")) == 0)
|
|
|
+ if (selinux_is_sblabel_mnt(sb))
|
|
|
sbsec->flags |= SBLABEL_MNT;
|
|
|
|
|
|
/* Initialize the root inode. */
|