1. 14 Mar, 2024 3 commits
    • Chao Yu's avatar
      f2fs: fix to avoid use-after-free issue in f2fs_filemap_fault · eb70d5a6
      Chao Yu authored
      syzbot reports a f2fs bug as below:
      
      BUG: KASAN: slab-use-after-free in f2fs_filemap_fault+0xd1/0x2c0 fs/f2fs/file.c:49
      Read of size 8 at addr ffff88807bb22680 by task syz-executor184/5058
      
      CPU: 0 PID: 5058 Comm: syz-executor184 Not tainted 6.7.0-syzkaller-09928-g052d5343 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
       print_address_description mm/kasan/report.c:377 [inline]
       print_report+0x163/0x540 mm/kasan/report.c:488
       kasan_report+0x142/0x170 mm/kasan/report.c:601
       f2fs_filemap_fault+0xd1/0x2c0 fs/f2fs/file.c:49
       __do_fault+0x131/0x450 mm/memory.c:4376
       do_shared_fault mm/memory.c:4798 [inline]
       do_fault mm/memory.c:4872 [inline]
       do_pte_missing mm/memory.c:3745 [inline]
       handle_pte_fault mm/memory.c:5144 [inline]
       __handle_mm_fault+0x23b7/0x72b0 mm/memory.c:5285
       handle_mm_fault+0x27e/0x770 mm/memory.c:5450
       do_user_addr_fault arch/x86/mm/fault.c:1364 [inline]
       handle_page_fault arch/x86/mm/fault.c:1507 [inline]
       exc_page_fault+0x456/0x870 arch/x86/mm/fault.c:1563
       asm_exc_page_fault+0x26/0x30 arch/x86/include/asm/idtentry.h:570
      
      The root cause is: in f2fs_filemap_fault(), vmf->vma may be not alive after
      filemap_fault(), so it may cause use-after-free issue when accessing
      vmf->vma->vm_flags in trace_f2fs_filemap_fault(). So it needs to keep vm_flags
      in separated temporary variable for tracepoint use.
      
      Fixes: 87f3afd3 ("f2fs: add tracepoint for f2fs_vm_page_mkwrite()")
      Reported-and-tested-by: syzbot+763afad57075d3f862f2@syzkaller.appspotmail.com
      Closes: https://lore.kernel.org/lkml/000000000000e8222b060f00db3b@google.com
      Cc: Ed Tsai <Ed.Tsai@mediatek.com>
      Suggested-by: default avatarHillf Danton <hdanton@sina.com>
      Signed-off-by: default avatarChao Yu <chao@kernel.org>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      eb70d5a6
    • Sunmin Jeong's avatar
      f2fs: truncate page cache before clearing flags when aborting atomic write · 74b0ebcb
      Sunmin Jeong authored
      In f2fs_do_write_data_page, FI_ATOMIC_FILE flag selects the target inode
      between the original inode and COW inode. When aborting atomic write and
      writeback occur simultaneously, invalid data can be written to original
      inode if the FI_ATOMIC_FILE flag is cleared meanwhile.
      
      To prevent the problem, let's truncate all pages before clearing the flag
      
      Atomic write thread              Writeback thread
        f2fs_abort_atomic_write
          clear_inode_flag(inode, FI_ATOMIC_FILE)
                                        __writeback_single_inode
                                          do_writepages
                                            f2fs_do_write_data_page
                                              - use dn of original inode
          truncate_inode_pages_final
      
      Fixes: 3db1de0e ("f2fs: change the current atomic write way")
      Cc: stable@vger.kernel.org #v5.19+
      Reviewed-by: default avatarSungjong Seo <sj1557.seo@samsung.com>
      Reviewed-by: default avatarYeongjin Gil <youngjin.gil@samsung.com>
      Signed-off-by: default avatarSunmin Jeong <s_min.jeong@samsung.com>
      Reviewed-by: default avatarDaeho Jeong <daehojeong@google.com>
      Reviewed-by: default avatarChao Yu <chao@kernel.org>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      74b0ebcb
    • Sunmin Jeong's avatar
      f2fs: mark inode dirty for FI_ATOMIC_COMMITTED flag · 4bf78322
      Sunmin Jeong authored
      In f2fs_update_inode, i_size of the atomic file isn't updated until
      FI_ATOMIC_COMMITTED flag is set. When committing atomic write right
      after the writeback of the inode, i_size of the raw inode will not be
      updated. It can cause the atomicity corruption due to a mismatch between
      old file size and new data.
      
      To prevent the problem, let's mark inode dirty for FI_ATOMIC_COMMITTED
      
      Atomic write thread                   Writeback thread
                                              __writeback_single_inode
                                                write_inode
                                                  f2fs_update_inode
                                                    - skip i_size update
        f2fs_ioc_commit_atomic_write
          f2fs_commit_atomic_write
            set_inode_flag(inode, FI_ATOMIC_COMMITTED)
          f2fs_do_sync_file
            f2fs_fsync_node_pages
              - skip f2fs_update_inode since the inode is clean
      
      Fixes: 3db1de0e ("f2fs: change the current atomic write way")
      Cc: stable@vger.kernel.org #v5.19+
      Reviewed-by: default avatarSungjong Seo <sj1557.seo@samsung.com>
      Reviewed-by: default avatarYeongjin Gil <youngjin.gil@samsung.com>
      Signed-off-by: default avatarSunmin Jeong <s_min.jeong@samsung.com>
      Reviewed-by: default avatarDaeho Jeong <daehojeong@google.com>
      Reviewed-by: default avatarChao Yu <chao@kernel.org>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
      4bf78322
  2. 13 Mar, 2024 7 commits
  3. 06 Mar, 2024 1 commit
  4. 04 Mar, 2024 14 commits
  5. 29 Feb, 2024 8 commits
  6. 27 Feb, 2024 7 commits