]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: fix NULL pointer dereference in do_abort_log_replay()
authorSuchit Karunakaran <suchitkarunakaran@gmail.com>
Fri, 19 Dec 2025 17:14:34 +0000 (22:44 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 17 Jan 2026 15:35:25 +0000 (16:35 +0100)
[ Upstream commit 530e3d4af566ca44807d79359b90794dea24c4f3 ]

Coverity reported a NULL pointer dereference issue (CID 1666756) in
do_abort_log_replay(). When btrfs_alloc_path() fails in
replay_one_buffer(), wc->subvol_path is NULL, but btrfs_abort_log_replay()
calls do_abort_log_replay() which unconditionally dereferences
wc->subvol_path when attempting to print debug information. Fix this by
adding a NULL check before dereferencing wc->subvol_path in
do_abort_log_replay().

Fixes: 2753e4917624 ("btrfs: dump detailed info and specific messages on log replay failures")
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Suchit Karunakaran <suchitkarunakaran@gmail.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/btrfs/tree-log.c

index de9ea9d52482f547d397b0f4aab127dee52e3edb..1444857de9fe85cbd0f7fc5b5135dafc91927d1a 100644 (file)
@@ -189,7 +189,7 @@ static void do_abort_log_replay(struct walk_control *wc, const char *function,
 
        btrfs_abort_transaction(wc->trans, error);
 
-       if (wc->subvol_path->nodes[0]) {
+       if (wc->subvol_path && wc->subvol_path->nodes[0]) {
                btrfs_crit(fs_info,
                           "subvolume (root %llu) leaf currently being processed:",
                           btrfs_root_id(wc->root));