From: Al Viro Date: Sat, 21 Mar 2015 23:40:11 +0000 (-0400) Subject: switch {compat_,}do_readv_writev() to {compat_,}import_iovec() X-Git-Tag: firefly_0821_release~176^2~1853^2~84 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0504c074b546651f19f23a214b76d145d3a0f5af;p=firefly-linux-kernel-4.4.55.git switch {compat_,}do_readv_writev() to {compat_,}import_iovec() Signed-off-by: Al Viro --- diff --git a/fs/read_write.c b/fs/read_write.c index 11980f164432..69128b378646 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -842,13 +842,14 @@ static ssize_t do_readv_writev(int type, struct file *file, iov_fn_t fnv; iter_fn_t iter_fn; - ret = rw_copy_check_uvector(type, uvector, nr_segs, - ARRAY_SIZE(iovstack), iovstack, &iov); - if (ret <= 0) - goto out; - iov_iter_init(&iter, type, iov, nr_segs, ret); + ret = import_iovec(type, uvector, nr_segs, + ARRAY_SIZE(iovstack), &iov, &iter); + if (ret < 0) + return ret; - tot_len = ret; + tot_len = iov_iter_count(&iter); + if (!tot_len) + goto out; ret = rw_verify_area(type, file, pos, tot_len); if (ret < 0) goto out; @@ -876,8 +877,7 @@ static ssize_t do_readv_writev(int type, struct file *file, file_end_write(file); out: - if (iov != iovstack) - kfree(iov); + kfree(iov); if ((ret + (type == READ)) > 0) { if (type == READ) fsnotify_access(file); @@ -1022,13 +1022,14 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, iov_fn_t fnv; iter_fn_t iter_fn; - ret = compat_rw_copy_check_uvector(type, uvector, nr_segs, - UIO_FASTIOV, iovstack, &iov); - if (ret <= 0) - goto out; - iov_iter_init(&iter, type, iov, nr_segs, ret); + ret = compat_import_iovec(type, uvector, nr_segs, + UIO_FASTIOV, &iov, &iter); + if (ret < 0) + return ret; - tot_len = ret; + tot_len = iov_iter_count(&iter); + if (!tot_len) + goto out; ret = rw_verify_area(type, file, pos, tot_len); if (ret < 0) goto out; @@ -1056,8 +1057,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, file_end_write(file); out: - if (iov != iovstack) - kfree(iov); + kfree(iov); if ((ret + (type == READ)) > 0) { if (type == READ) fsnotify_access(file);