Patch "fix unbalanced page refcounting in bio_map_user_iov" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
fix unbalanced page refcounting in bio_map_user_iov
to the 4.4-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-unbalanced-page-refcounting-in-bio_map_user_iov.patch
and it can be found in the queue-4.4 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
95d78c28b5a85bacbc29b8dba7c04babb9b0d467Mon Sep 17 00:00:00 2001
From: Vitaly Mayatskikh <[email protected]>
Date: Fri, 22 Sep 2017 01:18:39 -0400
Subject: fix unbalanced page refcounting in bio_map_user_iov
From: Vitaly Mayatskikh <[email protected]>
commit 95d78c28b5a85bacbc29b8dba7c04babb9b0d467 upstream.
bio_map_user_iov and bio_unmap_user do unbalanced pages refcounting if IO vector has small consecutive buffers belonging to the same page. bio_add_pc_page merges them into one, but the page reference is never dropped.
--- block/bio.c | 8 ++++++++ 1 file changed, 8 insertions(+)
block/bio.c +8 -0
@@ -1320,6 +1320,7 @@ struct bio *bio_map_user_iov(struct requ offset = uaddr & ~PAGE_MASK ;for (j = cur_page; j < page_limit; j++) {unsigned int bytes =PAGE_SIZE - offset; +unsigned short prev_bi_vcnt = bio->bi_vcnt;if (len <=0 )break ;
@@ -1334,6 +1335,13 @@ struct bio *bio_map_user_iov(struct requ bytes)break ; +/* +* check if vector was merged with previous +* drop page reference if needed +*/ +if (bio->bi_vcnt == prev_bi_vcnt) +put_page (pages[j]); + len -= bytes; offset =0 ; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/fix-unbalanced-page-refcounting-in-bio_map_user_iov.patch