Description
In the Linux kernel, the following vulnerability has been resolved: f2fs: fix to avoid UAF in f2fs_write_end_io() As syzbot reported an use-after-free issue in f2fs_write_end_io(). It is caused by below race condition: loop device umount - worker_thread - loop_process_work - do_req_filebacked - lo_rw_aio - lo_rw_aio_complete - blk_mq_end_request - blk_update_request - f2fs_write_end_io - dec_page_count - folio_end_writeback - kill_f2fs_super - kill_block_super - f2fs_put_super : free(sbi) : get_pages(, F2FS_WB_CP_DATA) accessed sbi which is freed In kill_f2fs_super(), we will drop all page caches of f2fs inodes before call free(sbi), it guarantee that all folios should end its writeback, so it should be safe to access sbi before last folio_end_writeback(). Let's relocate ckpt thread wakeup flow before folio_end_writeback() to resolve this issue.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
e234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < 0fb58aff0dafd6837cc91f4154f3ed6e020358faaffectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < 2f67ff1e15a8a4d0e4ffc6564ab20d03d7398fe9affectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < 505e1c0530db6152cab3feef8e3e4da3d3e358c9affectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < acc2c97fc0005846e5cf11b5ba3189fef130c9b3affectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < cf4a9e1bc8129eb63fda5f8bdcd8d87f0bd76f42affectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < 995030be4ce6338c6ff814583c14166446a64008affectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < a42f99be8a16b32a0bb91bb6dda212a6ad61be5daffectede234088758fca3a669ebb1a02d8bf7bf60f0e4ff to < ce2739e482bce8d2c014d76c4531c877f382aa54affected
Linux Linux
Default version status: affected
3.13affected0 to < 3.13unaffected5.10.251 to ≤ 5.10.*unaffected5.15.201 to ≤ 5.15.*unaffected6.1.164 to ≤ 6.1.*unaffected6.6.127 to ≤ 6.6.*unaffected6.12.74 to ≤ 6.12.*unaffected6.18.13 to ≤ 6.18.*unaffected6.19.3 to ≤ 6.19.*unaffected7.0 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/0fb58aff0dafd6837cc91f4154f3ed6e020358fa ↗
- https://git.kernel.org/stable/c/2f67ff1e15a8a4d0e4ffc6564ab20d03d7398fe9 ↗
- https://git.kernel.org/stable/c/505e1c0530db6152cab3feef8e3e4da3d3e358c9 ↗
- https://git.kernel.org/stable/c/acc2c97fc0005846e5cf11b5ba3189fef130c9b3 ↗
- https://git.kernel.org/stable/c/cf4a9e1bc8129eb63fda5f8bdcd8d87f0bd76f42 ↗
- https://git.kernel.org/stable/c/995030be4ce6338c6ff814583c14166446a64008 ↗
- https://git.kernel.org/stable/c/a42f99be8a16b32a0bb91bb6dda212a6ad61be5d ↗
- https://git.kernel.org/stable/c/ce2739e482bce8d2c014d76c4531c877f382aa54 ↗