public inbox for linux-block@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] block: do not copy data to user when bi_status is error
@ 2021-03-18 12:26 Jason Yan
  2021-03-18 12:56 ` Christoph Hellwig
  2021-03-18 15:13 ` Keith Busch
  0 siblings, 2 replies; 6+ messages in thread
From: Jason Yan @ 2021-03-18 12:26 UTC (permalink / raw)
  To: axboe, ming.lei, hch, keescook, linux-block; +Cc: Jason Yan

When the user submitted a request with unaligned buffer, we will
allocate a new page and try to copy data to or from the new page.
If it is a reading request, we always copy back the data to user's
buffer, whether the result is good or error. So if the driver or
hardware returns an error, garbage data is copied to the user space.
This is a potential security issue which makes kernel info leaks.

So do not copy the uninitalized data to user's buffer if the
bio->bi_status is not BLK_STS_OK in bio_copy_kern_endio_read().

Signed-off-by: Jason Yan <yanaijie@huawei.com>
---
 block/blk-map.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/block/blk-map.c b/block/blk-map.c
index 1ffef782fcf2..c2e2162d54d9 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -439,9 +439,11 @@ static void bio_copy_kern_endio_read(struct bio *bio)
 	struct bio_vec *bvec;
 	struct bvec_iter_all iter_all;
 
-	bio_for_each_segment_all(bvec, bio, iter_all) {
-		memcpy(p, page_address(bvec->bv_page), bvec->bv_len);
-		p += bvec->bv_len;
+	if (!bio->bi_status) {
+		bio_for_each_segment_all(bvec, bio, iter_all) {
+			memcpy(p, page_address(bvec->bv_page), bvec->bv_len);
+			p += bvec->bv_len;
+		}
 	}
 
 	bio_copy_kern_endio(bio);
-- 
2.25.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-03-19 16:02 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-03-18 12:26 [PATCH] block: do not copy data to user when bi_status is error Jason Yan
2021-03-18 12:56 ` Christoph Hellwig
2021-03-18 15:13 ` Keith Busch
2021-03-19  1:36   ` Ming Lei
2021-03-19  3:03     ` Jason Yan
2021-03-19 16:01     ` Keith Busch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox