Patch "fix iov_iter_fault_in_readable()" has been added to the 4.7-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
fix iov_iter_fault_in_readable()
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
fix-iov_iter_fault_in_readable.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d4690f1e1cdabb4d61207b6787b1605a0dc0aeabMon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Fri, 16 Sep 2016 00:11:45 +0100
Subject: fix iov_iter_fault_in_readable()
From: Al Viro <[email protected]>
commit d4690f1e1cdabb4d61207b6787b1605a0dc0aeab upstream.
... by turning it into what used to be multipages counterpart
--- include/linux/uio.h | 2 +- lib/iov_iter.c | 24 ++---------------------- 2 files changed, 3 insertions(+), 23 deletions(-)
include/linux/uio.h +1 -1
@@ -76,7 +76,7 @@ size_t iov_iter_copy_from_user_atomic(st struct iov_iter *i, unsigned long offset, size_t bytes);void iov_iter_advance (struct iov_iter *i,size_t bytes);int iov_iter_fault_in_readable (struct iov_iter *i,size_t bytes); -int iov_iter_fault_in_multipages_readable (struct iov_iter *i,size_t bytes); +#define iov_iter_fault_in_multipages_readable iov_iter_fault_in_readablesize_t iov_iter_single_seg_count (const struct iov_iter *i);size_t copy_page_to_iter (struct page *page,size_t offset,size_t bytes,struct iov_iter *i);
lib/iov_iter.c +2 -22
@@ -302,33 +302,13 @@ done: }/* -* Fault in the first iovec of the given iov_iter, to a maximum length -* of bytes. Returns 0 on success, or non-zero if the memory could not be -* accessed (ie. because it is an invalid address). -* -* writev-intensive code may want this to prefault several iovecs -- that -* would be possible (callers must not rely on the fact that _only_ the -* first iovec will be faulted with the current implementation). -*/ -int iov_iter_fault_in_readable (struct iov_iter *i,size_t bytes) -{ -if (!(i->type & (ITER_BVEC |ITER_KVEC ))) { -char __user *buf = i->iov->iov_base + i->iov_offset; - bytes =min (bytes, i->iov->iov_len - i->iov_offset); -return fault_in_pages_readable (buf, bytes); - } -return 0 ; -} -EXPORT_SYMBOL (iov_iter_fault_in_readable); - -/* * Fault in one or more iovecs of the given iov_iter, to a maximum length of * bytes. For each iovec, fault in each page that constitutes the iovec. * * Return 0 on success, or non-zero if the memory could not be accessed (i.e. * because it is an invalid address). */ -int iov_iter_fault_in_multipages_readable (struct iov_iter *i,size_t bytes) +int iov_iter_fault_in_readable (struct iov_iter *i,size_t bytes) {size_t skip = i->iov_offset;const struct iovec *iov;
@@ -345,7 +325,7 @@ int iov_iter_fault_in_multipages_readabl }return 0 ; } -EXPORT_SYMBOL (iov_iter_fault_in_multipages_readable); +EXPORT_SYMBOL (iov_iter_fault_in_readable); void iov_iter_init(struct iov_iter *i, int direction, const struct iovec *iov, unsigned long nr_segs,
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/arc-uaccess-get_user-to-zero-out-dest-in-cause-of-fault.patch queue-4.7/fix-minor-infoleak-in-get_user_ex.patch queue-4.7/fix-iov_iter_fault_in_readable.patch