From: Darrick J. Wong Date: Thu, 21 Nov 2024 00:24:12 +0000 (-0800) Subject: libxfs: enforce metadata inode flag X-Git-Tag: v6.13.0~174 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e864cf06c21c9c620197567782151b43d004d39c;p=thirdparty%2Fxfsprogs-dev.git 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 --- 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;