Patch "more bio_map_user_iov() leak fixes" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
more bio_map_user_iov() leak fixes
to the 4.9-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:
more-bio_map_user_iov-leak-fixes.patch
and it can be found in the queue-4.9 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
2b04e8f6bbb196cab4b232af0f8d48ff2c7a8058Mon Sep 17 00:00:00 2001
From: Al Viro <[email protected]>
Date: Sat, 23 Sep 2017 15:51:23 -0400
Subject: more bio_map_user_iov() leak fixes
From: Al Viro <[email protected]>
commit 2b04e8f6bbb196cab4b232af0f8d48ff2c7a8058 upstream.
we need to take care of failure exit as well - pages already in bio should be dropped by analogue of bio_unmap_pages(), since their refcounts had been bumped only once per reference in bio.
--- block/bio.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
block/bio.c +9 -5
@@ -1266,6 +1266,7 @@ struct bio *bio_map_user_iov(struct requint ret, offset;struct iov_iter i;struct iovec iov; +struct bio_vec *bvec;iov_for_each (iov, i, *iter) {unsigned long uaddr = (unsigned long ) iov.iov_base;
@@ -1310,7 +1311,12 @@ struct bio *bio_map_user_iov(struct requ ret =get_user_pages_fast (uaddr, local_nr_pages, (iter->type &WRITE ) !=WRITE , &pages[cur_page]); -if (ret < local_nr_pages) { +if (unlikely (ret < local_nr_pages)) { +for (j = cur_page; j < page_limit; j++) { +if (!pages[j]) +break ; +put_page (pages[j]); + } ret = -EFAULT ; goto out_unmap; }
@@ -1372,10 +1378,8 @@ struct bio *bio_map_user_iov(struct requreturn bio; out_unmap: -for (j =0 ; j < nr_pages; j++) { -if (!pages[j]) -break ; -put_page (pages[j]); +bio_for_each_segment_all (bvec, bio, j) { +put_page (bvec->bv_page); } out:kfree (pages);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/more-bio_map_user_iov-leak-fixes.patch queue-4.9/direct-io-prevent-null-pointer-access-in-submit_page_section.patch queue-4.9/bio_copy_user_iov-don-t-ignore-iov_offset.patch queue-4.9/fix-unbalanced-page-refcounting-in-bio_map_user_iov.patch