mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
ocfs2: validate inline xattr header before inline refcount attach
[BUG] A corrupt inline xattr header can make ocfs2_xattr_inline_attach_refcount() feed an unchecked header into the refcount-attachment walk for inline xattr values. [CAUSE] The inline refcount-attach path still derived the header directly from di->i_xattr_inline_size and then passed it to code that iterates xh_count and xattr entries. [FIX] Use the shared ibody header helper before attaching refcounts to inline xattr values so corrupt header geometry is rejected with -EFSCORRUPTED instead of being traversed. Link: https://lore.kernel.org/20260508085914.61647-5-gality369@gmail.com Signed-off-by: ZhengYuan Huang <gality369@gmail.com> Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Heming Zhao <heming.zhao@suse.com> Cc: Jia-Ju Bai <baijiaju1990@gmail.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Jun Piao <piaojun@huawei.com> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Zixuan Fu <r33s3n6@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
b8ba8bbe69
commit
4523ba0ee2
@@ -6016,14 +6016,17 @@ static int ocfs2_xattr_inline_attach_refcount(struct inode *inode,
|
||||
struct ocfs2_cached_dealloc_ctxt *dealloc)
|
||||
{
|
||||
struct ocfs2_dinode *di = (struct ocfs2_dinode *)fe_bh->b_data;
|
||||
struct ocfs2_xattr_header *header = (struct ocfs2_xattr_header *)
|
||||
(fe_bh->b_data + inode->i_sb->s_blocksize -
|
||||
le16_to_cpu(di->i_xattr_inline_size));
|
||||
struct ocfs2_xattr_header *header;
|
||||
int ret;
|
||||
struct ocfs2_xattr_value_buf vb = {
|
||||
.vb_bh = fe_bh,
|
||||
.vb_access = ocfs2_journal_access_di,
|
||||
};
|
||||
|
||||
ret = ocfs2_xattr_ibody_lookup_header(inode, di, &header);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return ocfs2_xattr_attach_refcount_normal(inode, &vb, header,
|
||||
ref_ci, ref_root_bh, dealloc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user