Patch "mm: validate pmd after splitting" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    mm: validate pmd after splitting

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mm-validate-pmd-after-splitting.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 13ce43984c2e337832e58cf4ea9770968cea5097
Author: Minchan Kim <minchan@xxxxxxxxxx>
Date:   Mon Sep 14 23:32:15 2020 -0700

    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@xxxxxxxxxxxxxxxxxxxxxxxxx
    Fixes: 1a4e58cce84e ("mm: introduce MADV_PAGEOUT")
    Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/mm/madvise.c b/mm/madvise.c
index 26f7954865ed9..1107e99e498b2 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -380,9 +380,9 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
 		return 0;
 	}
 
+regular_page:
 	if (pmd_trans_unstable(pmd))
 		return 0;
-regular_page:
 #endif
 	tlb_change_page_size(tlb, PAGE_SIZE);
 	orig_pte = pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux