Yang Shi
f4fa8d937e
mm: madvise: fix vma user-after-free
...
commit 7867fd7cc44e63c6673cd0f8fea155456d34d0de upstream.
The syzbot reported the below use-after-free:
BUG: KASAN: use-after-free in madvise_willneed mm/madvise.c:293 [inline]
BUG: KASAN: use-after-free in madvise_vma mm/madvise.c:942 [inline]
BUG: KASAN: use-after-free in do_madvise.part.0+0x1c8b/0x1cf0 mm/madvise.c:1145
Read of size 8 at addr ffff8880a6163eb0 by task syz-executor.0/9996
CPU: 0 PID: 9996 Comm: syz-executor.0 Not tainted 5.9.0-rc1-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x18f/0x20d lib/dump_stack.c:118
print_address_description.constprop.0.cold+0xae/0x497 mm/kasan/report.c:383
__kasan_report mm/kasan/report.c:513 [inline]
kasan_report.cold+0x1f/0x37 mm/kasan/report.c:530
madvise_willneed mm/madvise.c:293 [inline]
madvise_vma mm/madvise.c:942 [inline]
do_madvise.part.0+0x1c8b/0x1cf0 mm/madvise.c:1145
do_madvise mm/madvise.c:1169 [inline]
__do_sys_madvise mm/madvise.c:1171 [inline]
__se_sys_madvise mm/madvise.c:1169 [inline]
__x64_sys_madvise+0xd9/0x110 mm/madvise.c:1169
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Allocated by task 9992:
kmem_cache_alloc+0x138/0x3a0 mm/slab.c:3482
vm_area_alloc+0x1c/0x110 kernel/fork.c:347
mmap_region+0x8e5/0x1780 mm/mmap.c:1743
do_mmap+0xcf9/0x11d0 mm/mmap.c:1545
vm_mmap_pgoff+0x195/0x200 mm/util.c:506
ksys_mmap_pgoff+0x43a/0x560 mm/mmap.c:1596
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Freed by task 9992:
kmem_cache_free.part.0+0x67/0x1f0 mm/slab.c:3693
remove_vma+0x132/0x170 mm/mmap.c:184
remove_vma_list mm/mmap.c:2613 [inline]
__do_munmap+0x743/0x1170 mm/mmap.c:2869
do_munmap mm/mmap.c:2877 [inline]
mmap_region+0x257/0x1780 mm/mmap.c:1716
do_mmap+0xcf9/0x11d0 mm/mmap.c:1545
vm_mmap_pgoff+0x195/0x200 mm/util.c:506
ksys_mmap_pgoff+0x43a/0x560 mm/mmap.c:1596
do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9
It is because vma is accessed after releasing mmap_lock, but someone
else acquired the mmap_lock and the vma is gone.
Releasing mmap_lock after accessing vma should fix the problem.
Fixes: 692fe62433d4c ("mm: Handle MADV_WILLNEED through vfs_fadvise()")
Reported-by: syzbot+b90df26038d1d5d85c97@syzkaller.appspotmail.com
Signed-off-by: Yang Shi <shy828301@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: <stable@vger.kernel.org> [5.4+]
Link: https://lkml.kernel.org/r/20200816141204.162624-1-shy828301@gmail.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-09 19:12:36 +02:00
..
2020-05-27 17:46:48 +02:00
2020-05-14 07:58:30 +02:00
2019-09-04 07:42:01 -04:00
2019-07-12 12:24:03 -07:00
2019-05-14 09:47:45 -07:00
2020-09-03 11:26:51 +02:00
2017-11-02 11:10:55 +01:00
2020-07-09 09:37:57 +02:00
2017-11-02 11:10:55 +01:00
2020-03-05 16:43:51 +01:00
2019-07-12 11:05:46 -07:00
2017-12-11 14:54:44 +01:00
2019-08-30 22:43:58 -07:00
2019-07-12 11:05:43 -07:00
2020-08-05 09:59:41 +02:00
2019-09-25 17:51:41 -07:00
2019-06-19 17:09:52 +02:00
2020-01-09 10:20:00 +01:00
2020-06-17 16:40:30 +02:00
2018-12-28 12:11:47 -08:00
2019-09-07 04:28:04 -03:00
2020-06-22 09:31:14 +02:00
2019-11-15 18:34:00 -08:00
2020-08-26 10:41:07 +02:00
2019-06-03 15:39:40 +02:00
2019-10-19 06:32:32 -04:00
2020-01-09 10:19:55 +01:00
2019-06-19 17:09:08 +02:00
2019-09-24 15:54:11 -07:00
2019-09-24 15:54:08 -07:00
2020-08-26 10:40:48 +02:00
2019-06-05 17:37:06 +02:00
2019-10-14 08:56:16 -07:00
2020-04-29 16:33:15 +02:00
2019-07-12 11:05:44 -07:00
2020-01-17 19:48:40 +01:00
2020-09-09 19:12:36 +02:00
2019-09-24 15:54:10 -07:00
2019-10-19 06:32:32 -04:00
2020-07-29 10:18:43 +02:00
2019-09-24 15:54:08 -07:00
2020-08-21 13:05:27 +02:00
2019-10-19 06:32:31 -04:00
2020-01-09 10:19:55 +01:00
2020-04-08 09:08:47 +02:00
2019-03-05 21:07:20 -08:00
2020-01-09 10:19:56 +01:00
2017-11-02 11:10:55 +01:00
2020-02-11 04:35:13 -08:00
2019-09-25 17:51:41 -07:00
2019-09-25 17:51:41 -07:00
2019-05-21 10:50:45 +02:00
2020-08-19 08:16:02 +02:00
2020-09-03 11:26:51 +02:00
2020-02-11 04:35:42 -08:00
2019-11-06 08:47:50 -08:00
2017-11-02 11:10:55 +01:00
2020-03-12 13:00:19 +01:00
2020-06-07 13:18:46 +02:00
2019-09-25 17:51:41 -07:00
2020-03-25 08:25:58 +01:00
2020-01-09 10:19:57 +01:00
2020-08-26 10:40:51 +02:00
2020-08-21 13:05:27 +02:00
2019-10-14 15:04:00 -07:00
2019-06-29 16:43:45 +08:00
2019-11-15 18:34:00 -08:00
2019-07-12 11:05:43 -07:00
2019-10-19 06:32:31 -04:00
2019-09-24 15:54:08 -07:00
2019-09-24 15:54:08 -07:00
2020-01-23 08:22:41 +01:00
2019-09-07 04:28:04 -03:00
2019-03-13 12:25:31 -07:00
2019-06-05 17:37:16 +02:00
2019-06-05 17:37:16 +02:00
2019-06-05 17:37:16 +02:00
2019-09-04 13:40:49 -07:00
2018-10-09 16:51:11 +02:00
2019-05-30 11:26:32 -07:00
2019-05-21 10:50:45 +02:00
2019-10-19 06:32:32 -04:00
2019-06-05 17:37:17 +02:00
2020-05-20 08:20:03 +02:00
2020-09-03 11:26:51 +02:00
2019-05-14 19:52:48 -07:00
2020-07-29 10:18:44 +02:00
2020-01-23 08:22:40 +01:00
2019-11-06 08:47:50 -08:00
2019-10-07 15:47:20 -07:00
2020-09-09 19:12:36 +02:00
2019-07-18 17:08:07 -07:00
2020-04-01 11:02:03 +02:00
2017-11-02 11:10:55 +01:00
2018-08-22 10:52:44 -07:00
2020-07-09 09:37:49 +02:00
2019-09-25 17:51:41 -07:00
2020-04-01 11:02:02 +02:00
2019-10-19 06:32:33 -04:00
2019-09-17 15:20:17 -07:00
2019-06-19 17:09:53 +02:00
2020-06-17 16:40:23 +02:00
2018-09-13 15:18:04 -10:00
2020-09-03 11:26:52 +02:00
2019-10-07 15:47:19 -07:00
2020-02-28 17:22:20 +01:00
2019-11-06 08:47:50 -08:00
2019-08-13 16:06:52 -07:00
2019-10-07 15:47:19 -07:00
2019-05-21 10:50:45 +02:00
2019-09-24 15:54:12 -07:00
2020-01-09 10:19:56 +01:00
2019-09-24 15:54:12 -07:00