Ivan Orlov
2bcb4293ab
mm: khugepaged: fix kernel BUG in hpage_collapse_scan_file()
[ Upstream commit 2ce0bdfebc ]
Syzkaller reported the following issue:
kernel BUG at mm/khugepaged.c:1823!
invalid opcode: 0000 [#1] PREEMPT SMP KASAN
CPU: 1 PID: 5097 Comm: syz-executor220 Not tainted 6.2.0-syzkaller-13154-g857f1268a591 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/16/2023
RIP: 0010:collapse_file mm/khugepaged.c:1823 [inline]
RIP: 0010:hpage_collapse_scan_file+0x67c8/0x7580 mm/khugepaged.c:2233
Code: 00 00 89 de e8 c9 66 a3 ff 31 ff 89 de e8 c0 66 a3 ff 45 84 f6 0f 85 28 0d 00 00 e8 22 64 a3 ff e9 dc f7 ff ff e8 18 64 a3 ff <0f> 0b f3 0f 1e fa e8 0d 64 a3 ff e9 93 f6 ff ff f3 0f 1e fa 4c 89
RSP: 0018:ffffc90003dff4e0 EFLAGS: 00010093
RAX: ffffffff81e95988 RBX: 00000000000001c1 RCX: ffff8880205b3a80
RDX: 0000000000000000 RSI: 00000000000001c0 RDI: 00000000000001c1
RBP: ffffc90003dff830 R08: ffffffff81e90e67 R09: fffffbfff1a433c3
R10: 0000000000000000 R11: dffffc0000000001 R12: 0000000000000000
R13: ffffc90003dff6c0 R14: 00000000000001c0 R15: 0000000000000000
FS: 00007fdbae5ee700(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fdbae6901e0 CR3: 000000007b2dd000 CR4: 00000000003506e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
madvise_collapse+0x721/0xf50 mm/khugepaged.c:2693
madvise_vma_behavior mm/madvise.c:1086 [inline]
madvise_walk_vmas mm/madvise.c:1260 [inline]
do_madvise+0x9e5/0x4680 mm/madvise.c:1439
__do_sys_madvise mm/madvise.c:1452 [inline]
__se_sys_madvise mm/madvise.c:1450 [inline]
__x64_sys_madvise+0xa5/0xb0 mm/madvise.c:1450
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcd
The xas_store() call during page cache scanning can potentially translate
'xas' into the error state (with the reproducer provided by the syzkaller
the error code is -ENOMEM). However, there are no further checks after
the 'xas_store', and the next call of 'xas_next' at the start of the
scanning cycle doesn't increase the xa_index, and the issue occurs.
This patch will add the xarray state error checking after the xas_store()
and the corresponding result error code.
Tested via syzbot.
[akpm@linux-foundation.org: update include/trace/events/huge_memory.h's SCAN_STATUS]
Link: https://lkml.kernel.org/r/20230329145330.23191-1-ivan.orlov0322@gmail.com
Link: https://syzkaller.appspot.com/bug?id=7d6bb3760e026ece7524500fe44fb024a0e959fc
Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
Reported-by: syzbot+9578faa5475acb35fa50@syzkaller.appspotmail.com
Tested-by: Zach O'Keefe <zokeefe@google.com>
Cc: Yang Shi <shy828301@gmail.com>
Cc: Himadri Pandya <himadrispandya@gmail.com>
Cc: Ivan Orlov <ivan.orlov0322@gmail.com>
Cc: Shuah Khan <skhan@linuxfoundation.org>
Cc: Song Liu <songliubraving@fb.com>
Cc: Rik van Riel <riel@surriel.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-08-29 17:30:17 +02:00
..
2024-07-25 09:49:07 +02:00
2024-04-03 15:19:27 +02:00
2023-12-03 07:32:08 +01:00
2024-06-16 13:41:38 +02:00
2023-04-26 14:28:39 +02:00
2022-08-02 12:34:03 -04:00
2022-08-28 14:02:45 -07:00
2022-09-11 20:25:50 -07:00
2024-06-16 13:41:39 +02:00
2022-03-22 15:57:09 -07:00
2024-04-03 15:19:42 +02:00
2022-06-27 12:52:53 -07:00
2022-09-26 19:46:26 -07:00
2022-01-15 16:30:28 +02:00
2022-03-22 15:57:11 -07:00
2022-04-26 13:36:25 -07:00
2022-11-22 18:50:44 -08:00
2024-01-10 17:10:31 +01:00
2022-10-03 14:02:53 -07:00
2022-09-26 12:14:34 -07:00
2022-07-17 17:14:27 -07:00
2023-07-01 13:16:25 +02:00
2022-10-12 18:51:51 -07:00
2022-09-26 19:46:05 -07:00
2024-08-14 13:53:01 +02:00
2024-05-17 11:55:52 +02:00
2023-09-19 12:27:56 +02:00
2022-08-08 18:06:43 -07:00
2024-08-14 13:53:02 +02:00
2022-10-03 14:03:05 -07:00
2022-09-26 19:46:16 -07:00
2024-01-10 17:10:31 +01:00
2022-06-27 12:22:31 +01:00
2024-08-11 12:35:53 +02:00
2023-06-14 11:15:29 +02:00
2024-08-29 17:30:17 +02:00
2022-10-28 13:37:22 -07:00
2023-03-30 12:49:29 +02:00
2022-06-16 19:48:31 -07:00
2023-06-28 11:12:17 +02:00
2023-08-30 16:11:11 +02:00
2022-10-03 14:03:36 -07:00
2022-01-15 16:30:27 +02:00
2024-03-01 13:26:36 +01:00
2024-08-29 17:30:16 +02:00
2023-06-28 11:12:27 +02:00
2024-01-10 17:10:33 +01:00
2024-08-29 17:30:15 +02:00
2023-03-10 09:34:27 +01:00
2024-04-10 16:28:33 +02:00
2024-08-03 08:49:40 +02:00
2022-06-16 19:48:30 -07:00
2022-11-08 15:57:23 -08:00
2024-04-03 15:19:36 +02:00
2022-11-22 18:50:43 -08:00
2024-05-17 11:55:52 +02:00
2023-03-22 13:34:03 +01:00
2022-09-26 19:46:27 -07:00
2022-09-26 19:46:09 -07:00
2022-10-03 14:02:43 -07:00
2024-08-03 08:49:30 +02:00
2023-11-08 14:11:03 +01:00
2022-11-30 14:49:42 -08:00
2022-04-21 20:01:10 -07:00
2022-09-26 19:46:09 -07:00
2022-10-12 15:56:46 -07:00
2023-02-09 11:28:22 +01:00
2022-09-26 19:46:25 -07:00
2023-07-05 18:27:37 +01:00
2022-09-26 19:46:29 -07:00
2024-08-11 12:35:54 +02:00
2022-09-11 20:26:01 -07:00
2022-11-22 18:50:41 -08:00
2022-05-19 14:08:54 -07:00
2023-02-09 11:28:04 +01:00
2022-10-28 13:37:22 -07:00
2022-10-03 14:03:03 -07:00
2024-06-27 13:46:22 +02:00
2022-09-26 19:46:05 -07:00
2024-07-11 12:47:14 +02:00
2022-10-10 17:53:04 -07:00
2022-05-13 07:20:18 -07:00
2022-03-08 09:30:46 -05:00
2022-07-17 17:14:47 -07:00
2024-06-16 13:41:38 +02:00
2023-02-09 11:28:04 +01:00
2022-09-03 10:13:13 -07:00
2024-05-17 11:56:21 +02:00
2023-03-10 09:34:25 +01:00
2022-10-03 14:03:05 -07:00
2022-10-03 14:03:36 -07:00
2023-12-20 17:00:26 +01:00
2023-02-22 12:59:46 +01:00
2022-10-03 14:03:07 -07:00
2023-10-06 14:57:03 +02:00
2023-03-30 12:49:23 +02:00
2022-10-10 17:53:04 -07:00
2022-09-29 11:30:55 +02:00
2022-10-11 17:42:55 -06:00
2022-08-08 18:06:42 -07:00
2024-01-31 16:17:02 -08:00
2022-10-03 14:03:36 -07:00
2022-10-03 14:02:46 -07:00
2022-10-03 14:02:51 -07:00
2022-10-03 14:02:45 -07:00
2024-03-01 13:26:32 +01:00
2024-04-03 15:19:32 +02:00
2024-01-10 17:10:31 +01:00
2023-06-28 11:12:17 +02:00
2024-02-23 09:12:51 +01:00
2023-09-13 09:42:59 +02:00
2024-06-21 14:35:41 +02:00
2023-09-13 09:42:33 +02:00
2024-08-03 08:49:30 +02:00
2022-10-10 17:53:04 -07:00
2023-12-20 17:00:26 +01:00
2022-08-02 12:34:03 -04:00
2022-01-15 16:30:31 +02:00
2023-08-23 17:52:40 +02:00
2024-03-01 13:26:39 +01:00