Minchan Kim
fe932d4c9e
mm: validate pmd after splitting
...
[ Upstream commit ce2684254bd4818ca3995c0d021fb62c4cf10a19 ]
syzbot reported the following KASAN splat:
general protection fault, probably for non-canonical address 0xdffffc0000000003: 0000 [#1 ] PREEMPT SMP KASAN
KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
CPU: 1 PID: 6826 Comm: syz-executor142 Not tainted 5.9.0-rc4-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:__lock_acquire+0x84/0x2ae0 kernel/locking/lockdep.c:4296
Code: ff df 8a 04 30 84 c0 0f 85 e3 16 00 00 83 3d 56 58 35 08 00 0f 84 0e 17 00 00 83 3d 25 c7 f5 07 00 74 2c 4c 89 e8 48 c1 e8 03 <80> 3c 30 00 74 12 4c 89 ef e8 3e d1 5a 00 48 be 00 00 00 00 00 fc
RSP: 0018:ffffc90004b9f850 EFLAGS: 00010006
Call Trace:
lock_acquire+0x140/0x6f0 kernel/locking/lockdep.c:5006
__raw_spin_lock include/linux/spinlock_api_smp.h:142 [inline]
_raw_spin_lock+0x2a/0x40 kernel/locking/spinlock.c:151
spin_lock include/linux/spinlock.h:354 [inline]
madvise_cold_or_pageout_pte_range+0x52f/0x25c0 mm/madvise.c:389
walk_pmd_range mm/pagewalk.c:89 [inline]
walk_pud_range mm/pagewalk.c:160 [inline]
walk_p4d_range mm/pagewalk.c:193 [inline]
walk_pgd_range mm/pagewalk.c:229 [inline]
__walk_page_range+0xe7b/0x1da0 mm/pagewalk.c:331
walk_page_range+0x2c3/0x5c0 mm/pagewalk.c:427
madvise_pageout_page_range mm/madvise.c:521 [inline]
madvise_pageout mm/madvise.c:557 [inline]
madvise_vma mm/madvise.c:946 [inline]
do_madvise+0x12d0/0x2090 mm/madvise.c:1145
__do_sys_madvise mm/madvise.c:1171 [inline]
__se_sys_madvise mm/madvise.c:1169 [inline]
__x64_sys_madvise+0x76/0x80 mm/madvise.c:1169
do_syscall_64+0x31/0x70 arch/x86/entry/common.c:46
entry_SYSCALL_64_after_hwframe+0x44/0xa9
The backing vma was shmem.
In case of split page of file-backed THP, madvise zaps the pmd instead
of remapping of sub-pages. So we need to check pmd validity after
split.
Reported-by: syzbot+ecf80462cb7d5d552bc7@syzkaller.appspotmail.com
Fixes: 1a4e58cce84e ("mm: introduce MADV_PAGEOUT")
Signed-off-by: Minchan Kim <minchan@kernel.org>
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-10-01 13:18:21 +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
2020-07-09 09:37:57 +02:00
2020-03-05 16:43:51 +01:00
2019-07-12 11:05:46 -07:00
2019-08-30 22:43:58 -07:00
2019-07-12 11:05:43 -07:00
2020-10-01 13:17:53 +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-09-26 18:03:11 +02:00
2019-11-15 18:34:00 -08:00
2020-09-09 19:12:37 +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-09-09 19:12:37 +02:00
2019-06-05 17:37:06 +02:00
2020-10-01 13:17:53 +02: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-10-01 13:18:21 +02:00
2019-09-24 15:54:10 -07:00
2019-10-19 06:32:32 -04:00
2020-10-01 13:18:08 +02:00
2019-09-24 15:54:08 -07:00
2020-09-23 12:40:47 +02:00
2019-10-19 06:32:31 -04:00
2020-10-01 13:17:39 +02: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
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-10-01 13:17:54 +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
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
2020-09-23 12:40:47 +02: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
2020-10-01 13:17:30 +02: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
2020-09-23 12:40:45 +02: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-10-01 13:17:59 +02:00
2019-07-18 17:08:07 -07:00
2020-04-01 11:02:03 +02:00
2018-08-22 10:52:44 -07:00
2020-10-01 13:18:08 +02:00
2019-09-25 17:51:41 -07:00
2020-10-01 13:17:53 +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-10-01 13:17:53 +02: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