|
|
@@ -3458,12 +3458,16 @@ static int selinux_inode_setsecurity(struct inode *inode, const char *name,
|
|
|
const void *value, size_t size, int flags)
|
|
|
{
|
|
|
struct inode_security_struct *isec = inode_security_novalidate(inode);
|
|
|
+ struct superblock_security_struct *sbsec = inode->i_sb->s_security;
|
|
|
u32 newsid;
|
|
|
int rc;
|
|
|
|
|
|
if (strcmp(name, XATTR_SELINUX_SUFFIX))
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
+ if (!(sbsec->flags & SBLABEL_MNT))
|
|
|
+ return -EOPNOTSUPP;
|
|
|
+
|
|
|
if (!value || !size)
|
|
|
return -EACCES;
|
|
|
|
|
|
@@ -6612,7 +6616,10 @@ static void selinux_inode_invalidate_secctx(struct inode *inode)
|
|
|
*/
|
|
|
static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen)
|
|
|
{
|
|
|
- return selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, ctx, ctxlen, 0);
|
|
|
+ int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX,
|
|
|
+ ctx, ctxlen, 0);
|
|
|
+ /* Do not return error when suppressing label (SBLABEL_MNT not set). */
|
|
|
+ return rc == -EOPNOTSUPP ? 0 : rc;
|
|
|
}
|
|
|
|
|
|
/*
|