Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7aa84d9 authored by Martin K. Petersen's avatar Martin K. Petersen Committed by Jens Axboe
Browse files

block: Fix for_each_bvec()



Commit 4550dd6c introduced for_each_bvec() which iterates over each
bvec attached to a bio or bip. However, the macro fails to check bi_size
before dereferencing which can lead to crashes while counting/mapping
integrity scatterlist segments.

Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Cc: Kent Overstreet <kmo@daterainc.com>
Cc: Nicholas Bellinger <nab@linux-iscsi.org>
Cc: <stable@vger.kernel.org> # v3.14+
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 44bd70c3
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -216,9 +216,9 @@ static inline void bvec_iter_advance(struct bio_vec *bv, struct bvec_iter *iter,
}

#define for_each_bvec(bvl, bio_vec, iter, start)			\
	for ((iter) = start;						\
	     (bvl) = bvec_iter_bvec((bio_vec), (iter)),			\
		(iter).bi_size;						\
	for (iter = (start);						\
	     (iter).bi_size &&						\
		((bvl = bvec_iter_bvec((bio_vec), (iter))), 1);	\
	     bvec_iter_advance((bio_vec), &(iter), (bvl).bv_len))