diff options
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index d85b793c932..f7d7e779c7f 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2708,6 +2708,7 @@ static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)  {  	const struct cred *cred = current_cred();  	unsigned int ia_valid = iattr->ia_valid; +	__u32 av = FILE__WRITE;  	/* ATTR_FORCE is just used for ATTR_KILL_S[UG]ID. */  	if (ia_valid & ATTR_FORCE) { @@ -2721,7 +2722,10 @@ static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)  			ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))  		return dentry_has_perm(cred, dentry, FILE__SETATTR); -	return dentry_has_perm(cred, dentry, FILE__WRITE); +	if (ia_valid & ATTR_SIZE) +		av |= FILE__OPEN; + +	return dentry_has_perm(cred, dentry, av);  }  static int selinux_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)  |