ocfs2: validate l_tree_depth to avoid out-of-bounds access
[ Upstream commita406aff8c0] The l_tree_depth field is 16-bit (__le16), but the actual maximum depth is limited to OCFS2_MAX_PATH_DEPTH. Add a check to prevent out-of-bounds access if l_tree_depth has an invalid value, which may occur when reading from a corrupted mounted disk [1]. Link: https://lkml.kernel.org/r/20250214084908.736528-1-kovalev@altlinux.org Fixes:ccd979bdbc("[PATCH] OCFS2: The Second Oracle Cluster Filesystem") Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org> Reported-by: syzbot+66c146268dc88f4341fd@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=66c146268dc88f4341fd [1] Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.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> Cc: Kurt Hackel <kurt.hackel@oracle.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Vasiliy Kovalev <kovalev@altlinux.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
d242135154
commit
17c99ab3db
@@ -1796,6 +1796,14 @@ static int __ocfs2_find_path(struct ocfs2_caching_info *ci,
|
||||
|
||||
el = root_el;
|
||||
while (el->l_tree_depth) {
|
||||
if (unlikely(le16_to_cpu(el->l_tree_depth) >= OCFS2_MAX_PATH_DEPTH)) {
|
||||
ocfs2_error(ocfs2_metadata_cache_get_super(ci),
|
||||
"Owner %llu has invalid tree depth %u in extent list\n",
|
||||
(unsigned long long)ocfs2_metadata_cache_owner(ci),
|
||||
le16_to_cpu(el->l_tree_depth));
|
||||
ret = -EROFS;
|
||||
goto out;
|
||||
}
|
||||
if (le16_to_cpu(el->l_next_free_rec) == 0) {
|
||||
ocfs2_error(ocfs2_metadata_cache_get_super(ci),
|
||||
"Owner %llu has empty extent list at depth %u\n",
|
||||
|
||||
Reference in New Issue
Block a user