[PATCH] fs/ntfs3: bound FILE_NAME name_len in ntfs_read_mft()
From: Marouane El Moufid
Date: Sun Oct 25 2026 - 18:04:17 EST
When reading an MFT record attribute of type ATTR_NAME, ntfs_read_mft()
validates only the fixed FILE_NAME header (SIZEOF_ATTRIBUTE_FILENAME)
against the resident attribute size, but never bounds the variable name
length. A crafted record with fname->name_len up to 255 and a minimal
resident size then makes ntfs_cmp_names_cpu() read fname->name past the
end of the MFT-record buffer (KASAN: slab-out-of-bounds, read of size 2),
reachable from a mounted crafted NTFS image by a stat() of the name.
The directory enumeration path (ntfs_dir_emit) already bounds the name
against the entry size; apply the same bound here using the existing
fname_full_size() helper.
Signed-off-by: Marouane El Moufid <eun0us@xxxxxxxxxxx>
---
fs/ntfs3/inode.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c
--- a/fs/ntfs3/inode.c
+++ b/fs/ntfs3/inode.c
@@ -202,6 +202,8 @@
names += 1;
fname = Add2Ptr(attr, roff);
+ if (fname_full_size(fname) > rsize)
+ goto out;
if (fname->type == FILE_NAME_DOS)
goto next_attr;