yangerkun
5233f4465e
block: reexpand iov_iter after read/write
...
[ Upstream commit cf7b39a0cbf6bf57aa07a008d46cf695add05b4c ]
We get a bug:
BUG: KASAN: slab-out-of-bounds in iov_iter_revert+0x11c/0x404
lib/iov_iter.c:1139
Read of size 8 at addr ffff0000d3fb11f8 by task
CPU: 0 PID: 12582 Comm: syz-executor.2 Not tainted
5.10.0-00843-g352c8610ccd2 #2
Hardware name: linux,dummy-virt (DT)
Call trace:
dump_backtrace+0x0/0x2d0 arch/arm64/kernel/stacktrace.c:132
show_stack+0x28/0x34 arch/arm64/kernel/stacktrace.c:196
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x110/0x164 lib/dump_stack.c:118
print_address_description+0x78/0x5c8 mm/kasan/report.c:385
__kasan_report mm/kasan/report.c:545 [inline]
kasan_report+0x148/0x1e4 mm/kasan/report.c:562
check_memory_region_inline mm/kasan/generic.c:183 [inline]
__asan_load8+0xb4/0xbc mm/kasan/generic.c:252
iov_iter_revert+0x11c/0x404 lib/iov_iter.c:1139
io_read fs/io_uring.c:3421 [inline]
io_issue_sqe+0x2344/0x2d64 fs/io_uring.c:5943
__io_queue_sqe+0x19c/0x520 fs/io_uring.c:6260
io_queue_sqe+0x2a4/0x590 fs/io_uring.c:6326
io_submit_sqe fs/io_uring.c:6395 [inline]
io_submit_sqes+0x4c0/0xa04 fs/io_uring.c:6624
__do_sys_io_uring_enter fs/io_uring.c:9013 [inline]
__se_sys_io_uring_enter fs/io_uring.c:8960 [inline]
__arm64_sys_io_uring_enter+0x190/0x708 fs/io_uring.c:8960
__invoke_syscall arch/arm64/kernel/syscall.c:36 [inline]
invoke_syscall arch/arm64/kernel/syscall.c:48 [inline]
el0_svc_common arch/arm64/kernel/syscall.c:158 [inline]
do_el0_svc+0x120/0x290 arch/arm64/kernel/syscall.c:227
el0_svc+0x1c/0x28 arch/arm64/kernel/entry-common.c:367
el0_sync_handler+0x98/0x170 arch/arm64/kernel/entry-common.c:383
el0_sync+0x140/0x180 arch/arm64/kernel/entry.S:670
Allocated by task 12570:
stack_trace_save+0x80/0xb8 kernel/stacktrace.c:121
kasan_save_stack mm/kasan/common.c:48 [inline]
kasan_set_track mm/kasan/common.c:56 [inline]
__kasan_kmalloc+0xdc/0x120 mm/kasan/common.c:461
kasan_kmalloc+0xc/0x14 mm/kasan/common.c:475
__kmalloc+0x23c/0x334 mm/slub.c:3970
kmalloc include/linux/slab.h:557 [inline]
__io_alloc_async_data+0x68/0x9c fs/io_uring.c:3210
io_setup_async_rw fs/io_uring.c:3229 [inline]
io_read fs/io_uring.c:3436 [inline]
io_issue_sqe+0x2954/0x2d64 fs/io_uring.c:5943
__io_queue_sqe+0x19c/0x520 fs/io_uring.c:6260
io_queue_sqe+0x2a4/0x590 fs/io_uring.c:6326
io_submit_sqe fs/io_uring.c:6395 [inline]
io_submit_sqes+0x4c0/0xa04 fs/io_uring.c:6624
__do_sys_io_uring_enter fs/io_uring.c:9013 [inline]
__se_sys_io_uring_enter fs/io_uring.c:8960 [inline]
__arm64_sys_io_uring_enter+0x190/0x708 fs/io_uring.c:8960
__invoke_syscall arch/arm64/kernel/syscall.c:36 [inline]
invoke_syscall arch/arm64/kernel/syscall.c:48 [inline]
el0_svc_common arch/arm64/kernel/syscall.c:158 [inline]
do_el0_svc+0x120/0x290 arch/arm64/kernel/syscall.c:227
el0_svc+0x1c/0x28 arch/arm64/kernel/entry-common.c:367
el0_sync_handler+0x98/0x170 arch/arm64/kernel/entry-common.c:383
el0_sync+0x140/0x180 arch/arm64/kernel/entry.S:670
Freed by task 12570:
stack_trace_save+0x80/0xb8 kernel/stacktrace.c:121
kasan_save_stack mm/kasan/common.c:48 [inline]
kasan_set_track+0x38/0x6c mm/kasan/common.c:56
kasan_set_free_info+0x20/0x40 mm/kasan/generic.c:355
__kasan_slab_free+0x124/0x150 mm/kasan/common.c:422
kasan_slab_free+0x10/0x1c mm/kasan/common.c:431
slab_free_hook mm/slub.c:1544 [inline]
slab_free_freelist_hook mm/slub.c:1577 [inline]
slab_free mm/slub.c:3142 [inline]
kfree+0x104/0x38c mm/slub.c:4124
io_dismantle_req fs/io_uring.c:1855 [inline]
__io_free_req+0x70/0x254 fs/io_uring.c:1867
io_put_req_find_next fs/io_uring.c:2173 [inline]
__io_queue_sqe+0x1fc/0x520 fs/io_uring.c:6279
__io_req_task_submit+0x154/0x21c fs/io_uring.c:2051
io_req_task_submit+0x2c/0x44 fs/io_uring.c:2063
task_work_run+0xdc/0x128 kernel/task_work.c:151
get_signal+0x6f8/0x980 kernel/signal.c:2562
do_signal+0x108/0x3a4 arch/arm64/kernel/signal.c:658
do_notify_resume+0xbc/0x25c arch/arm64/kernel/signal.c:722
work_pending+0xc/0x180
blkdev_read_iter can truncate iov_iter's count since the count + pos may
exceed the size of the blkdev. This will confuse io_read that we have
consume the iovec. And once we do the iov_iter_revert in io_read, we
will trigger the slab-out-of-bounds. Fix it by reexpand the count with
size has been truncated.
blkdev_write_iter can trigger the problem too.
Signed-off-by: yangerkun <yangerkun@huawei.com>
Acked-by: Pavel Begunkov <asml.silencec@gmail.com>
Link: https://lore.kernel.org/r/20210401071807.3328235-1-yangerkun@huawei.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-05-22 11:38:29 +02:00
..
2020-11-05 11:43:34 +01:00
2019-07-19 11:33:22 -07:00
2021-03-04 10:26:48 +01:00
2021-03-24 11:26:37 +01:00
2019-10-25 00:03:11 -04:00
2019-08-30 07:27:17 -07:00
2021-01-06 14:48:39 +01:00
2021-05-11 14:04:14 +02:00
2020-11-05 11:43:36 +01:00
2021-05-22 11:38:29 +02:00
2021-05-11 14:04:04 +02:00
2019-09-19 09:42:37 -07:00
2021-03-17 17:03:56 +01:00
2019-11-23 21:44:49 -05:00
2021-01-06 14:48:35 +01:00
2021-03-04 10:26:10 +01:00
2019-09-03 09:30:56 -04:00
2021-05-19 10:08:20 +02:00
2021-05-11 14:04:02 +02:00
2020-12-02 08:49:53 +01:00
2019-08-30 07:27:17 -07:00
2021-05-11 14:04:02 +02:00
2019-11-10 11:56:05 -05:00
2020-09-09 19:12:30 +02:00
2021-05-11 14:04:16 +02:00
2021-05-19 10:08:32 +02:00
2020-06-17 16:40:36 +02:00
2019-08-30 07:27:17 -07:00
2021-05-19 10:08:22 +02:00
2021-04-16 11:46:37 +02:00
2021-05-19 10:08:29 +02:00
2021-04-14 08:24:14 +02:00
2019-08-30 08:11:25 -07:00
2021-05-19 10:08:29 +02:00
2021-05-19 10:08:30 +02:00
2021-03-04 10:26:30 +01:00
2020-11-18 19:20:30 +01:00
2021-05-11 14:04:16 +02:00
2021-03-07 12:20:41 +01:00
2020-08-19 08:16:12 +02:00
2020-12-30 11:51:16 +01:00
2020-08-21 13:05:37 +02:00
2021-05-19 10:08:25 +02:00
2020-12-30 11:51:22 +01:00
2021-04-07 14:47:39 +02:00
2020-06-17 16:40:29 +02:00
2020-06-17 16:40:24 +02:00
2021-02-26 10:10:27 +01:00
2021-04-14 08:24:10 +02:00
2019-08-30 08:11:25 -07:00
2019-07-19 10:42:02 -07:00
2020-08-21 13:05:29 +02:00
2021-05-14 09:44:16 +02:00
2021-01-12 20:16:10 +01:00
2021-03-04 10:26:45 +01:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2021-03-04 10:26:26 +01:00
2020-10-29 09:57:53 +01:00
2021-04-07 14:47:43 +02:00
2020-08-26 10:40:51 +02:00
2021-05-19 10:08:29 +02:00
2021-03-07 12:20:48 +01:00
2019-08-30 07:27:18 -07:00
2019-10-12 20:49:07 -04:00
2021-05-11 14:04:14 +02:00
2021-03-17 17:03:41 +01:00
2020-08-21 13:05:37 +02:00
2019-09-17 11:48:24 -04:00
2019-08-12 19:33:50 -07:00
2021-03-07 12:20:42 +01:00
2020-06-17 16:40:24 +02:00
2019-07-19 10:42:02 -07:00
2020-02-11 04:35:12 -08:00
2020-06-03 08:21:27 +02:00
2020-09-03 11:26:39 +02:00
2021-03-17 17:03:57 +01:00
2021-05-22 11:38:29 +02:00
2020-11-05 11:43:24 +01:00
2020-01-14 20:08:18 +01:00
2020-01-09 10:20:05 +01:00
2020-12-11 13:23:30 +01:00
2020-10-29 09:57:45 +01:00
2021-02-26 10:10:28 +01:00
2020-10-01 13:17:19 +02:00
2021-04-14 08:24:11 +02:00
2020-01-12 12:21:37 +01:00
2020-02-11 04:35:37 -08:00
2020-10-07 08:01:31 +02:00
2021-01-09 13:44:55 +01:00
2021-01-06 14:48:39 +01:00
2019-08-07 21:51:47 -04:00
2019-08-19 11:00:39 -04:00
2020-05-27 17:46:12 +02:00
2020-04-17 10:50:21 +02:00
2019-09-06 21:28:49 +02:00
2019-09-12 21:06:14 -04:00
2019-07-16 22:52:37 -04:00
2021-01-30 13:54:11 +01:00
2019-07-19 10:42:02 -07:00
2020-03-25 08:25:58 +01:00
2020-01-17 19:48:21 +01:00
2021-01-30 13:54:10 +01:00
2019-12-17 19:55:30 +01:00
2019-09-18 16:59:14 -07:00
2020-11-24 13:29:19 +01:00
2020-03-25 08:25:41 +01:00
2019-09-18 16:59:14 -07:00
2019-07-16 22:52:37 -04:00
2020-01-17 19:48:21 +01:00
2020-03-05 16:43:48 +01:00
2021-01-06 14:48:40 +01:00
2020-03-18 07:17:51 +01:00
2020-05-02 08:48:44 +02:00
2021-03-17 17:03:33 +01:00
2019-09-06 21:28:49 +02:00
2020-02-11 04:35:23 -08:00
2021-04-21 12:56:16 +02:00
2021-03-24 11:26:44 +01:00
2019-08-13 16:06:52 -07:00
2020-08-26 10:40:58 +02:00
2019-12-17 19:56:52 +01:00
2019-10-03 14:21:35 -07:00
2020-11-24 13:29:01 +01:00
2019-08-01 20:51:23 +02:00
2020-01-04 19:18:32 +01:00
2020-02-11 04:35:12 -08:00
2020-08-11 15:33:39 +02:00