From nobody Mon Feb 9 07:19:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97AFA23EA95 for ; Wed, 7 Jan 2026 11:22:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767784945; cv=none; b=rMgZ4k6Z1z025eMRRXYwIwiVsysVNUPdVFbfhrPiMxQNtDSx+9lbR3ohAwDsyfSifo9RTwXnRoAqctp6a/bPozZNspHL7qFcWcZyr3EubhfZ8dc8H/1KeMqg0RfPb5Cb6jcMdPKwfPurMQPLymVPH59yH8pXZ5GXK7eekzqqtVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767784945; c=relaxed/simple; bh=JdLNNhz6TndS2TdnRKWxFftQNQGpGbseSjPDtVIwKwo=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=ICu96xXjGDySLFs7m1481NhzlJngcTL2uTsAqMyxeu2T9m/t3mhFrJXnSixazt+s0AOsIS2hJw1B2CxL8nvOF6sIoeOgqV8zqtwpuMDTdYv7qnrYwWWiOO2cJa/tmgswVSUecSyVi9rzF41AkNUMfsvQg3nT9du06sZ166RfmLA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HmopiO0k; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="HmopiO0k" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99D5BC4CEF7; Wed, 7 Jan 2026 11:22:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1767784945; bh=JdLNNhz6TndS2TdnRKWxFftQNQGpGbseSjPDtVIwKwo=; h=From:To:Cc:Subject:Date:From; b=HmopiO0kdYMSYo+BCKr8/hFg1RJ9RUWJ9lOsZFJzn8uE0xIwnmyNFW83T8w7+9IzD f5G29lu/r2HVWLLLvZzXM8/XEBHf0y2TtGWl+wEIGWcD7enp22KYxXT2dLlhKrB0m4 GDxQSfwWZc+zbYrUwZ7bLPHeix6RR8Dut0waLUnonXlEgMz50f2cw0wHVby4k+Lpwx rYnBO5okFahl1kmP1FIkBhB/2sMOnjfmk47BmbBYWwXpqAy22AF/qw2qtaOEIE31qn xLYtmWyZH/wDMjIE76E2dI3KaFflBZ9yrYeBK7Ufww0g/pk/rSP88oRNVG5aSOINJR BCjXWqxNd0f3w== From: Chao Yu To: jaegeuk@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, Chao Yu , stable@kernel.org, syzbot+b4444e3c972a7a124187@syzkaller.appspotmail.com Subject: [PATCH] f2fs: fix to avoid UAF in f2fs_write_end_io() Date: Wed, 7 Jan 2026 19:22:18 +0800 Message-Id: <20260107112218.1789-1-chao@kernel.org> X-Mailer: git-send-email 2.40.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. Cc: stable@kernel.org Fixes: e234088758fc ("f2fs: avoid wait if IO end up when do_checkpoint for = better performance") Reported-by: syzbot+b4444e3c972a7a124187@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=3Db4444e3c972a7a124187 Signed-off-by: Chao Yu --- fs/f2fs/data.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index c30e69392a62..8550c964b71c 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -356,14 +356,20 @@ static void f2fs_write_end_io(struct bio *bio) folio->index !=3D nid_of_node(folio)); =20 dec_page_count(sbi, type); + + /* + * we should access sbi before folio_end_writeback() to + * avoid racing w/ kill_f2fs_super() + */ + if (type =3D=3D F2FS_WB_CP_DATA && !get_pages(sbi, type) && + wq_has_sleeper(&sbi->cp_wait)) + wake_up(&sbi->cp_wait); + if (f2fs_in_warm_node_list(sbi, folio)) f2fs_del_fsync_node_entry(sbi, folio); folio_clear_f2fs_gcing(folio); folio_end_writeback(folio); } - if (!get_pages(sbi, F2FS_WB_CP_DATA) && - wq_has_sleeper(&sbi->cp_wait)) - wake_up(&sbi->cp_wait); =20 bio_put(bio); } --=20 2.40.1