diff options
Diffstat (limited to 'security/selinux/hooks.c')
-rw-r--r-- | security/selinux/hooks.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index f8931c5d252a..81e012c66d95 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
@@ -3264,12 +3264,16 @@ static int selinux_inode_setsecurity(struct inode *inode, const char *name, | |||
3264 | const void *value, size_t size, int flags) | 3264 | const void *value, size_t size, int flags) |
3265 | { | 3265 | { |
3266 | struct inode_security_struct *isec = inode_security_novalidate(inode); | 3266 | struct inode_security_struct *isec = inode_security_novalidate(inode); |
3267 | struct superblock_security_struct *sbsec = inode->i_sb->s_security; | ||
3267 | u32 newsid; | 3268 | u32 newsid; |
3268 | int rc; | 3269 | int rc; |
3269 | 3270 | ||
3270 | if (strcmp(name, XATTR_SELINUX_SUFFIX)) | 3271 | if (strcmp(name, XATTR_SELINUX_SUFFIX)) |
3271 | return -EOPNOTSUPP; | 3272 | return -EOPNOTSUPP; |
3272 | 3273 | ||
3274 | if (!(sbsec->flags & SBLABEL_MNT)) | ||
3275 | return -EOPNOTSUPP; | ||
3276 | |||
3273 | if (!value || !size) | 3277 | if (!value || !size) |
3274 | return -EACCES; | 3278 | return -EACCES; |
3275 | 3279 | ||
@@ -6415,7 +6419,10 @@ static void selinux_inode_invalidate_secctx(struct inode *inode) | |||
6415 | */ | 6419 | */ |
6416 | static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) | 6420 | static int selinux_inode_notifysecctx(struct inode *inode, void *ctx, u32 ctxlen) |
6417 | { | 6421 | { |
6418 | return selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, ctx, ctxlen, 0); | 6422 | int rc = selinux_inode_setsecurity(inode, XATTR_SELINUX_SUFFIX, |
6423 | ctx, ctxlen, 0); | ||
6424 | /* Do not return error when suppressing label (SBLABEL_MNT not set). */ | ||
6425 | return rc == -EOPNOTSUPP ? 0 : rc; | ||
6419 | } | 6426 | } |
6420 | 6427 | ||
6421 | /* | 6428 | /* |