]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
btrfs: fix NULL dereference on root when tracing inode eviction
authorMiquel Sabaté Solà <mssola@mssola.com>
Tue, 21 Oct 2025 09:11:25 +0000 (11:11 +0200)
committerDavid Sterba <dsterba@suse.com>
Tue, 16 Dec 2025 21:53:14 +0000 (22:53 +0100)
When evicting an inode the first thing we do is to setup tracing for it,
which implies fetching the root's id. But in btrfs_evict_inode() the
root might be NULL, as implied in the next check that we do in
btrfs_evict_inode().

Hence, we either should set the ->root_objectid to 0 in case the root is
NULL, or we move tracing setup after checking that the root is not
NULL. Setting the rootid to 0 at least gives us the possibility to trace
this call even in the case when the root is NULL, so that's the solution
taken here.

Fixes: 1abe9b8a138c ("Btrfs: add initial tracepoint support for btrfs")
Reported-by: syzbot+d991fea1b4b23b1f6bf8@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=d991fea1b4b23b1f6bf8
Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
include/trace/events/btrfs.h

index 7e418f065b945adef5d7398d8bf6a44e798dc00d..125bdc166bfed7aa8d447cd65597929873068aa2 100644 (file)
@@ -224,7 +224,8 @@ DECLARE_EVENT_CLASS(btrfs__inode,
                __entry->generation = BTRFS_I(inode)->generation;
                __entry->last_trans = BTRFS_I(inode)->last_trans;
                __entry->logged_trans = BTRFS_I(inode)->logged_trans;
-               __entry->root_objectid = btrfs_root_id(BTRFS_I(inode)->root);
+               __entry->root_objectid = BTRFS_I(inode)->root ?
+                                        btrfs_root_id(BTRFS_I(inode)->root) : 0;
        ),
 
        TP_printk_btrfs("root=%llu(%s) gen=%llu ino=%llu blocks=%llu "