]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
ntfs: sanitize MFT references returned from ntfs_lookup_inode_by_name()
authorNamjae Jeon <linkinjeon@kernel.org>
Mon, 6 Jul 2026 03:00:00 +0000 (12:00 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Mon, 6 Jul 2026 11:27:16 +0000 (20:27 +0900)
commitd97a36bae86a9a4021562ded2987f904e6bcb1d7
tree15892daff0bf5881d1f5383b136d73cb989022a4
parent06769b8f23b4b645b270c438649fff79768fb6fe
ntfs: sanitize MFT references returned from ntfs_lookup_inode_by_name()

ntfs_lookup_inode_by_name() returns MFT references read from directory
index entries on disk. These values are untrusted, but the function can
currently return an error-marked MFT reference to its callers without
validating it.

Callers later decode lookup failures with MREF_ERR(). A crafted NTFS image
can set the MREF error bit while leaving the low bits as an arbitrary
value, causing callers to consume a bogus pseudo-errno instead of treating
the lookup result as corrupted on-disk metadata.

Fix this at the source by normalizing every error-marked MFT reference
returned from ntfs_lookup_inode_by_name() to ERR_MREF(-EIO). Apply this to
all four directory lookup return paths so every caller gets a validated
result without needing additional checks or an API change.

This keeps the sanitization in the common lookup helper, which is cleaner
than duplicating validation in each caller.

Fixes: 1e9ea7e04472 ("Revert "fs: Remove NTFS classic"")
Cc: stable@vger.kernel.org
Reported-by: Hongling Zeng <zenghongling@kylinos.cn>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/ntfs/dir.c