summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2025-01-31 14:13:15 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-02-27 04:10:52 -0800
commit95b93d542c755883ac2b35bf5ccd7909e2313cdc (patch)
tree8807b13875619f06c4fd3b9b8d1864826364cc30 /lib
parent4f31247ecb37ff3794d47920ffd5d8e26bab4dd3 (diff)
downloadlinux-95b93d542c755883ac2b35bf5ccd7909e2313cdc.tar.gz
linux-95b93d542c755883ac2b35bf5ccd7909e2313cdc.tar.bz2
linux-95b93d542c755883ac2b35bf5ccd7909e2313cdc.zip
lib/iov_iter: fix import_iovec_ubuf iovec management
commit f4b78260fc678ccd7169f32dc9f3bfa3b93931c7 upstream. import_iovec() says that it should always be fine to kfree the iovec returned in @iovp regardless of the error code. __import_iovec_ubuf() never reallocates it and thus should clear the pointer even in cases when copy_iovec_*() fail. Link: https://lkml.kernel.org/r/378ae26923ffc20fd5e41b4360d673bf47b1775b.1738332461.git.asml.silence@gmail.com Fixes: 3b2deb0e46da ("iov_iter: import single vector iovecs as ITER_UBUF") Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Reviewed-by: Jens Axboe <axboe@kernel.dk> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Christian Brauner <brauner@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/iov_iter.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index a4bb47efafe3..d6620eaa9515 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -1441,6 +1441,8 @@ static ssize_t __import_iovec_ubuf(int type, const struct iovec __user *uvec,
struct iovec *iov = *iovp;
ssize_t ret;
+ *iovp = NULL;
+
if (compat)
ret = copy_compat_iovec_from_user(iov, uvec, 1);
else
@@ -1451,7 +1453,6 @@ static ssize_t __import_iovec_ubuf(int type, const struct iovec __user *uvec,
ret = import_ubuf(type, iov->iov_base, iov->iov_len, i);
if (unlikely(ret))
return ret;
- *iovp = NULL;
return i->count;
}