]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ocfs2: avoid NULL pointer dereference in dx_dir_lookup_rec()
authorIvan Pravdin <ipravdin.official@gmail.com>
Tue, 8 Jul 2025 00:10:09 +0000 (20:10 -0400)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 20 Jul 2025 02:08:27 +0000 (19:08 -0700)
When a directory entry is not found, ocfs2_dx_dir_lookup_rec() prints an
error message that unconditionally dereferences the 'rec' pointer.
However, if 'rec' is NULL, this leads to a NULL pointer dereference and a
kernel panic.

Add an explicit check empty extent list to avoid dereferencing NULL
'rec' pointer.

Link: https://lkml.kernel.org/r/20250708001009.372263-1-ipravdin.official@gmail.com
Reported-by: syzbot+20282c1b2184a857ac4c@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/all/67cd7e29.050a0220.e1a89.0007.GAE@google.com/
Signed-off-by: Ivan Pravdin <ipravdin.official@gmail.com>
Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Cc: Mark Fasheh <mark@fasheh.com>
Cc: Joel Becker <jlbec@evilplan.org>
Cc: Junxiao Bi <junxiao.bi@oracle.com>
Cc: Changwei Ge <gechangwei@live.cn>
Cc: Jun Piao <piaojun@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/ocfs2/dir.c

index 7799f4d16ce9993264489b93050cab1002f952b0..8c9c4825f9841d1cd4a39e1919681ce7050a74b7 100644 (file)
@@ -798,6 +798,14 @@ static int ocfs2_dx_dir_lookup_rec(struct inode *inode,
                }
        }
 
+       if (le16_to_cpu(el->l_next_free_rec) == 0) {
+               ret = ocfs2_error(inode->i_sb,
+                                 "Inode %lu has empty extent list at depth %u\n",
+                                 inode->i_ino,
+                                 le16_to_cpu(el->l_tree_depth));
+               goto out;
+       }
+
        found = 0;
        for (i = le16_to_cpu(el->l_next_free_rec) - 1; i >= 0; i--) {
                rec = &el->l_recs[i];