diff --git a/debian/changelog b/debian/changelog index 1beea58bf..17bdf0fa3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ linux (4.3.3-3) UNRELEASED; urgency=medium [ Ben Hutchings ] * [ppc64*] drm: Enable DRM_AST as module (Closes: #808338) + * block: ensure to split after potentially bouncing a bio (Closes: #809082) [ Salvatore Bonaccorso ] * ovl: fix permission checking for setattr (CVE-2015-8660) diff --git a/debian/patches/bugfix/all/block-ensure-to-split-after-potentially-bouncing-a-b.patch b/debian/patches/bugfix/all/block-ensure-to-split-after-potentially-bouncing-a-b.patch new file mode 100644 index 000000000..4aed0bc02 --- /dev/null +++ b/debian/patches/bugfix/all/block-ensure-to-split-after-potentially-bouncing-a-b.patch @@ -0,0 +1,39 @@ +From: Junichi Nomura +Date: Tue, 22 Dec 2015 10:23:44 -0700 +Subject: block: ensure to split after potentially bouncing a bio +Origin: https://git.kernel.org/linus/23688bf4f830a89866fd0ed3501e342a7360fe4f +Bug-Debian: https://bugs.debian.org/809082 + +blk_queue_bio() does split then bounce, which makes the segment +counting based on pages before bouncing and could go wrong. Move +the split to after bouncing, like we do for blk-mq, and the we +fix the issue of having the bio count for segments be wrong. + +Fixes: 54efd50bfd87 ("block: make generic_make_request handle arbitrarily sized bios") +Cc: stable@vger.kernel.org +Tested-by: Artem S. Tashkinov +Signed-off-by: Jens Axboe +--- + block/blk-core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/block/blk-core.c ++++ b/block/blk-core.c +@@ -1616,8 +1616,6 @@ static void blk_queue_bio(struct request + struct request *req; + unsigned int request_count = 0; + +- blk_queue_split(q, &bio, q->bio_split); +- + /* + * low level driver can indicate that it wants pages above a + * certain limit bounced to low memory (ie for highmem, or even +@@ -1625,6 +1623,8 @@ static void blk_queue_bio(struct request + */ + blk_queue_bounce(q, &bio); + ++ blk_queue_split(q, &bio, q->bio_split); ++ + if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) { + bio->bi_error = -EIO; + bio_endio(bio); diff --git a/debian/patches/series b/debian/patches/series index a993574e4..6b0ef059b 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -106,3 +106,4 @@ bugfix/all/vrf-fix-double-free-and-memory-corruption-on-registe.patch bugfix/all/tipc-fix-kfree_skb-of-uninitialised-pointer.patch debian/armhf-sparc64-force-zone_dma-to-be-enabled.patch bugfix/all/ovl-fix-permission-checking-for-setattr.patch +bugfix/all/block-ensure-to-split-after-potentially-bouncing-a-b.patch