From e864cf06c21c9c620197567782151b43d004d39c Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Wed, 20 Nov 2024 16:24:12 -0800 Subject: [PATCH] libxfs: enforce metadata inode flag Add checks for the metadata inode flag so that we don't ever leak metadata inodes out to userspace, and we don't ever try to read a regular inode as metadata. Signed-off-by: "Darrick J. Wong" Reviewed-by: Christoph Hellwig --- libxfs/inode.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libxfs/inode.c b/libxfs/inode.c index 1eb0bcca..0598a70f 100644 --- a/libxfs/inode.c +++ b/libxfs/inode.c @@ -208,7 +208,8 @@ out_destroy: /* * Get a metadata inode. * - * The metafile type must match the file mode exactly. + * The metafile type must match the file mode exactly, and for files in the + * metadata directory tree, it must match the inode's metatype exactly. */ int libxfs_trans_metafile_iget( @@ -232,6 +233,12 @@ libxfs_trans_metafile_iget( mode = S_IFREG; if (inode_wrong_type(VFS_I(ip), mode)) goto bad_rele; + if (xfs_has_metadir(mp)) { + if (!xfs_is_metadir_inode(ip)) + goto bad_rele; + if (metafile_type != ip->i_metatype) + goto bad_rele; + } *ipp = ip; return 0; -- 2.47.3