On 2026/2/27 15:30, Yongpeng Yang wrote:
From: Yongpeng Yang <[email protected]>

The xfstests case "generic/107" and syzbot have both reported a NULL
pointer dereference.

The concurrent scenario that triggers the panic is as follows:

F2FS_WB_CP_DATA write callback          umount
                                         - f2fs_write_checkpoint
                                          - f2fs_wait_on_all_pages(sbi, 
F2FS_WB_CP_DATA)
- blk_mq_end_request
  - bio_endio
   - f2fs_write_end_io
    : dec_page_count(sbi, F2FS_WB_CP_DATA)
    : wake_up(&sbi->cp_wait)
                                         - kill_f2fs_super
                                          - kill_block_super
                                           - f2fs_put_super
                                            : iput(sbi->node_inode)
                                            : sbi->node_inode = NULL
    : f2fs_in_warm_node_list
     - is_node_folio // sbi->node_inode is NULL and panic

The root cause is that f2fs_put_super() calls iput(sbi->node_inode) and
sets sbi->node_inode to NULL after sbi->nr_pages[F2FS_WB_CP_DATA] is
decremented to zero. As a result, f2fs_in_warm_node_list() may
dereference a NULL node_inode when checking whether a folio belongs to
the node inode, leading to a panic.

This patch fixes the issue by calling f2fs_in_warm_node_list() before
decrementing sbi->nr_pages[F2FS_WB_CP_DATA], thus preventing the
use-after-free condition.


Cc: [email protected]

Fixes: 50fa53eccf9f ("f2fs: fix to avoid broken of dnode block list")
Reported-by: [email protected]
Signed-off-by: Yongpeng Yang <[email protected]>

Reviewed-by: Chao Yu <[email protected]>

Thanks,


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to