Re: [PATCH 1/1] fs: add the fsnotify call to vfs_iter_write

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

 



On Thu, Jan 31, 2019 at 03:19:39PM +0100, Jimmy Durand Wesolowski wrote:
> A bug has been discovered when redirecting splice output to regular files
> on EXT4 and tmpfs. Other filesystems might be affected.
> This commit fixes the issue for stable series kernel, using one of the
> change introduced during the rewrite and refactoring of vfs_iter_write in
> 4.13, specifically in the
> commit abbb65899aec ("fs: implement vfs_iter_write using do_iter_write").
> 
> This issue affects v4.4 and v4.9 stable series of kernels.
> 
> Without this fix for v4.4 and v4.9 stable, the following upstream commits
> (and their dependencies would need to be backported):
> * commit abbb65899aec ("fs: implement vfs_iter_write using do_iter_write")
> * commit 18e9710ee59c ("fs: implement vfs_iter_read using do_iter_read")
> * commit edab5fe38c2c
>   ("fs: move more code into do_iter_read/do_iter_write")
> * commit 19c735868dd0 ("fs: remove __do_readv_writev")
> * commit 26c87fb7d10d ("fs: remove do_compat_readv_writev")
> * commit 251b42a1dc64 ("fs: remove do_readv_writev")
> 
> as well as the following dependencies:
> * commit bb7462b6fd64
>   ("vfs: use helpers for calling f_op->{read,write}_iter()")
> * commit 0f78d06ac1e9
>   ("vfs: pass type instead of fn to do_{loop,iter}_readv_writev()")
> * commit 7687a7a4435f
>   ("vfs: extract common parts of {compat_,}do_readv_writev()")
> 
> In order to reduce the changes, this commit uses only the part of
> commit abbb65899aec ("fs: implement vfs_iter_write using do_iter_write")
> that fixes the issue.
> 
> This issue and the reproducer can be found on
> https://bugzilla.kernel.org/show_bug.cgi?id=85381
> 
> Reported-by: Richard Li <richardpku@xxxxxxxxx>
> Reported-by: Chad Miller <millchad@xxxxxxxxxx>
> Reviewed-by: Stefan Nuernberger <snu@xxxxxxxxx>
> Reviewed-by: Frank Becker <becke@xxxxxxxxx>
> Signed-off-by: Jimmy Durand Wesolowski <jdw@xxxxxxxxx>
> ---
>  fs/read_write.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/read_write.c b/fs/read_write.c
> index ba28059..9819f7c 100644
> --- a/fs/read_write.c
> +++ b/fs/read_write.c
> @@ -392,8 +392,10 @@ ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos)
>  	iter->type |= WRITE;
>  	ret = file->f_op->write_iter(&kiocb, iter);
>  	BUG_ON(ret == -EIOCBQUEUED);
> -	if (ret > 0)
> +	if (ret > 0) {
>  		*ppos = kiocb.ki_pos;
> +		fsnotify_modify(file);
> +	}
>  	return ret;
>  }
>  EXPORT_SYMBOL(vfs_iter_write);

Nice catch!  Queued up now, thanks.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux