diff options
Diffstat (limited to 'fs/cifs/cifssmb.c')
| -rw-r--r-- | fs/cifs/cifssmb.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 76d0d299885..00e12f2d626 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c @@ -5819,8 +5819,14 @@ static void  cifs_fill_unix_set_info(FILE_UNIX_BASIC_INFO *data_offset,  			const struct cifs_unix_set_info_args *args)  { +	u64 uid = NO_CHANGE_64, gid = NO_CHANGE_64;  	u64 mode = args->mode; +	if (uid_valid(args->uid)) +		uid = from_kuid(&init_user_ns, args->uid); +	if (gid_valid(args->gid)) +		gid = from_kgid(&init_user_ns, args->gid); +  	/*  	 * Samba server ignores set of file size to zero due to bugs in some  	 * older clients, but we should be precise - we use SetFileSize to @@ -5833,8 +5839,8 @@ cifs_fill_unix_set_info(FILE_UNIX_BASIC_INFO *data_offset,  	data_offset->LastStatusChange = cpu_to_le64(args->ctime);  	data_offset->LastAccessTime = cpu_to_le64(args->atime);  	data_offset->LastModificationTime = cpu_to_le64(args->mtime); -	data_offset->Uid = cpu_to_le64(args->uid); -	data_offset->Gid = cpu_to_le64(args->gid); +	data_offset->Uid = cpu_to_le64(uid); +	data_offset->Gid = cpu_to_le64(gid);  	/* better to leave device as zero when it is  */  	data_offset->DevMajor = cpu_to_le64(MAJOR(args->device));  	data_offset->DevMinor = cpu_to_le64(MINOR(args->device));  |