• Baokun Li's avatar
    ext4: fix null-ptr-deref in ext4_write_info · f9c1f248
    Baokun Li authored
    I caught a null-ptr-deref bug as follows:
    ==================================================================
    KASAN: null-ptr-deref in range [0x0000000000000068-0x000000000000006f]
    CPU: 1 PID: 1589 Comm: umount Not tainted 5.10.0-02219-dirty #339
    RIP: 0010:ext4_write_info+0x53/0x1b0
    [...]
    Call Trace:
     dquot_writeback_dquots+0x341/0x9a0
     ext4_sync_fs+0x19e/0x800
     __sync_filesystem+0x83/0x100
     sync_filesystem+0x89/0xf0
     generic_shutdown_super+0x79/0x3e0
     kill_block_super+0xa1/0x110
     deactivate_locked_super+0xac/0x130
     deactivate_super+0xb6/0xd0
     cleanup_mnt+0x289/0x400
     __cleanup_mnt+0x16/0x20
     task_work_run+0x11c/0x1c0
     exit_to_user_mode_prepare+0x203/0x210
     syscall_exit_to_user_mode+0x5b/0x3a0
     do_syscall_64+0x59/0x70
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
     ==================================================================
    
    Above issue may happen as follows:
    -------------------------------------
    exit_to_user_mode_prepare
     task_work_run
      __cleanup_mnt
       cleanup_mnt
        deactivate_super
         deactivate_locked_super
          kill_block_super
           generic_shutdown_super
            shrink_dcache_for_umount
             dentry = sb->s_root
             sb->s_root = NULL              <--- Here set NULL
            sync_filesystem
             __sync_filesystem
              sb->s_op->sync_fs > ext4_sync_fs
               dquot_writeback_dquots
                sb->dq_op->write_info > ext4_write_info
                 ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2)
                  d_inode(sb->s_root)
                   s_root->d_inode          <--- Null pointer dereference
    
    To solve this problem, we use ext4_journal_start_sb directly
    to avoid s_root being used.
    
    Cc: stable@kernel.org
    Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20220805123947.565152-1-libaokun1@huawei.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    f9c1f248
super.c 200 KB