Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1297221

[PATCH] block: warn once for cloned bio in bio_for_each_segment_all()

From Ming Lei <ming.lei@canonical.com>
Newsgroups linux.kernel
Subject [PATCH] block: warn once for cloned bio in bio_for_each_segment_all()
Date 2015-12-23 03:50 +0100
Message-ID <qIHEZ-3NF-7@gated-at.bofh.it> (permalink)
Organization linux.* mail to news gateway

Show all headers | View raw


For one cloned bio, kernel shouldn't touch all segments of this
bio via the helper, because the bvec table is shared among all
related bios, so warn once for this usage.

This change should catch recent memory corruption issue, which is
fixed by 23688bf4f830(block: ensure to split after potentially
bouncing a bio).

Signed-off-by: Ming Lei <ming.lei@canonical.com>
---
 include/linux/bio.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/bio.h b/include/linux/bio.h
index b9b6e04..b4a298d 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -191,6 +191,7 @@ static inline void *bio_data(struct bio *bio)
  * before it got to the driver and the driver won't own all of it
  */
 #define bio_for_each_segment_all(bvl, bio, i)				\
+	WARN_ON_ONCE(bio_flagged(bio, BIO_CLONED));			\
 	for (i = 0, bvl = (bio)->bi_io_vec; i < (bio)->bi_vcnt; i++, bvl++)
 
 static inline void bvec_iter_advance(struct bio_vec *bv, struct bvec_iter *iter,
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next | Find similar | Unroll thread


Thread

[PATCH] block: warn once for cloned bio in bio_for_each_segment_all() Ming Lei <ming.lei@canonical.com> - 2015-12-23 03:50 +0100

csiph-web