• Zhe Li's avatar
    jffs2: fix UAF problem · 96de3dbf
    Zhe Li authored
    [ Upstream commit 798b7347 ]
    
    The log of UAF problem is listed below.
    BUG: KASAN: use-after-free in jffs2_rmdir+0xa4/0x1cc [jffs2] at addr c1f165fc
    Read of size 4 by task rm/8283
    =============================================================================
    BUG kmalloc-32 (Tainted: P    B      O   ): kasan: bad access detected
    -----------------------------------------------------------------------------
    
    INFO: Allocated in 0xbbbbbbbb age=3054364 cpu=0 pid=0
            0xb0bba6ef
            jffs2_write_dirent+0x11c/0x9c8 [jffs2]
            __slab_alloc.isra.21.constprop.25+0x2c/0x44
            __kmalloc+0x1dc/0x370
            jffs2_write_dirent+0x11c/0x9c8 [jffs2]
            jffs2_do_unlink+0x328/0x5fc [jffs2]
            jffs2_rmdir+0x110/0x1cc [jffs2]
            vfs_rmdir+0x180/0x268
            do_rmdir+0x2cc/0x300
            ret_from_syscall+0x0/0x3c
    INFO: Freed in 0x205b age=3054364 cpu=0 pid=0
            0x2e9173
            jffs2_add_fd_to_list+0x138/0x1dc [jffs2]
            jffs2_add_fd_to_list+0x138/0x1dc [jffs2]
            jffs2_garbage_collect_dirent.isra.3+0x21c/0x288 [jffs2]
            jffs2_garbage_collect_live+0x16bc/0x1800 [jffs2]
            jffs2_garbage_collect_pass+0x678/0x11d4 [jffs2]
            jffs2_garbage_collect_thread+0x1e8/0x3b0 [jffs2]
            kthread+0x1a8/0x1b0
            ret_from_kernel_thread+0x5c/0x64
    Call Trace:
    [c17ddd20] [c02452d4] kasan_report.part.0+0x298/0x72c (unreliable)
    [c17ddda0] [d2509680] jffs2_rmdir+0xa4/0x1cc [jffs2]
    [c17dddd0] [c026da04] vfs_rmdir+0x180/0x268
    [c17dde00] [c026f4e4] do_rmdir+0x2cc/0x300
    [c17ddf40] [c001a658] ret_from_syscall+0x0/0x3c
    
    The root cause is that we don't get "jffs2_inode_info.sem" before
    we scan list "jffs2_inode_info.dents" in function jffs2_rmdir.
    This patch add codes to get "jffs2_inode_info.sem" before we scan
    "jffs2_inode_info.dents" to slove the UAF problem.
    Signed-off-by: default avatarZhe Li <lizhe67@huawei.com>
    Reviewed-by: default avatarHou Tao <houtao1@huawei.com>
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    96de3dbf
dir.c 22.6 KB