Re: [PATCH v2 09/15] do_cifs_create(): don't set ->i_mode of something we had not created

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 2021-03-13 at 04:38 +0000, Al Viro wrote:
> If the file had existed before we'd called ->atomic_open() (without
> O_EXCL, that is), we have no more business setting ->i_mode than
> we would setting ->i_uid or ->i_gid.  We also have no business
> doing either if another client has managed to get unlink+mkdir
> between ->open() and cifs_inode_get_info().
> 
> Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
> ---
>  fs/cifs/dir.c | 19 ++++++++++---------
>  1 file changed, 10 insertions(+), 9 deletions(-)
> 
> diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
> index a3fb81e0ba17..9d7ae93c8af7 100644
> --- a/fs/cifs/dir.c
> +++ b/fs/cifs/dir.c
> @@ -418,15 +418,16 @@ cifs_do_create(struct inode *inode, struct dentry *direntry, unsigned int xid,
>  		if (newinode) {
>  			if (server->ops->set_lease_key)
>  				server->ops->set_lease_key(newinode, fid);
> -			if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
> -				newinode->i_mode = mode;
> -			if ((*oplock & CIFS_CREATE_ACTION) &&
> -			    (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID)) {
> -				newinode->i_uid = current_fsuid();
> -				if (inode->i_mode & S_ISGID)
> -					newinode->i_gid = inode->i_gid;
> -				else
> -					newinode->i_gid = current_fsgid();
> +			if ((*oplock & CIFS_CREATE_ACTION) && S_ISREG(newinode->i_mode)) {
> +				if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM)
> +					newinode->i_mode = mode;
> +				if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
> +					newinode->i_uid = current_fsuid();
> +					if (inode->i_mode & S_ISGID)
> +						newinode->i_gid = inode->i_gid;
> +					else
> +						newinode->i_gid = current_fsgid();
> +				}
>  			}
>  		}
>  	}

Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux