Commit 12f6f861 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] dm-crypt end_io bv_offset fix

From: Christophe Saout <christophe@saout.de>

We should copy the bvec array for read requests so that we still
have the unmodified bvec array to decrypt the data afterwards.

(as discussed earlier this day for highmem bounces)
parent 08e03016
...@@ -593,8 +593,21 @@ crypt_clone(struct crypt_config *cc, struct crypt_io *io, struct bio *bio, ...@@ -593,8 +593,21 @@ crypt_clone(struct crypt_config *cc, struct crypt_io *io, struct bio *bio,
return NULL; return NULL;
} }
} }
} else } else {
clone = bio_clone(bio, GFP_NOIO); /*
* The block layer might modify the bvec array, so always
* copy the required bvecs because we need the original
* one in order to decrypt the whole bio data *afterwards*.
*/
clone = bio_alloc(GFP_NOIO, bio_segments(bio));
if (clone) {
clone->bi_idx = 0;
clone->bi_vcnt = bio_segments(bio);
clone->bi_size = bio->bi_size;
memcpy(clone->bi_io_vec, bio_iovec(bio),
sizeof(struct bio_vec) * clone->bi_vcnt);
}
}
if (!clone) if (!clone)
return NULL; return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment