All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] blk-map: add kernel address validation in blk_rq_map_kern func
@ 2019-12-30 12:17 Zhiqiang Liu
  2020-01-07  2:38 ` Zhiqiang Liu
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Zhiqiang Liu @ 2019-12-30 12:17 UTC (permalink / raw)
  To: Jens Axboe, linux-block, jens.axboe, namhyung, bharrosh, renxudong
  Cc: Mingfangsen, zhengbin13, Guiyao

From: renxudong <renxudong1@huawei.com>

Blk_rq_map_kern func is used to map kernel data to a request,
in which kbuf par should be a valid kernel buffer. However,
kbuf par is only checked whether it is null in blk_rq_map_kern func.

If users pass a non kernel address to blk_rq_map_kern func in the
non-aligned scenario, the invalid kbuf will be set to bio->bi_private.
When the request is completed, bio_copy_kern_endio_read will be called
to copy data to the kernel address in bio->bi_private. If the bi_private
is not a valid kernel address, the system will oops. In this case, we
cannot judge whether the bio structure is damaged or the kernel address is
invalid.

Here, we add kernel address validation by calling virt_addr_valid.

Signed-off-by: renxudong <renxudong1@huawei.com>
Reviewed-by: Zhiqiang Liu <liuzhiqiang26@huawei.com>
---
 block/blk-map.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/blk-map.c b/block/blk-map.c
index 3a62e471d81b..7deb1b44d1e3 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -229,7 +229,7 @@ int blk_rq_map_kern(struct request_queue *q, struct request *rq, void *kbuf,

 	if (len > (queue_max_hw_sectors(q) << 9))
 		return -EINVAL;
-	if (!len || !kbuf)
+	if (!len || !virt_addr_valid(kbuf))
 		return -EINVAL;

 	do_copy = !blk_rq_aligned(q, addr, len) || object_is_on_stack(kbuf);
-- 
2.24.0.windows.2


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

end of thread, other threads:[~2020-01-13  6:33 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-30 12:17 [PATCH] blk-map: add kernel address validation in blk_rq_map_kern func Zhiqiang Liu
2020-01-07  2:38 ` Zhiqiang Liu
2020-01-07  4:05   ` Bob Liu
2020-01-07  6:51     ` renxudong
2020-01-08 15:07       ` Christoph Hellwig
2020-01-12  0:18         ` Bart Van Assche
2020-01-13  6:32           ` renxudong
2020-01-13  3:53         ` renxudong
2020-01-07  4:02 ` Jens Axboe
2020-01-08 13:31 ` Christoph Hellwig
2020-01-13  3:22   ` renxudong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.