]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ntfs: match ntfs_resident_attr_min_value_length with $AttrDef
authorHyunchul Lee <hyc.lee@gmail.com>
Mon, 4 May 2026 11:03:14 +0000 (20:03 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Fri, 8 May 2026 14:50:59 +0000 (23:50 +0900)
Update ntfs_resident_attr_min_value_length() to align with $AttrDef.
The $VOLUME_NAME is allowed to have the  size of 0.

The Windows 11 $AttrDef values are as follows:

Attribute Name             (ID)   Size (Min-Max)  Flags

$STANDARD_INFORMATION      (16)   48-72           Resident
$ATTRIBUTE_LIST            (32)   No Limit        Non-resident
$FILE_NAME                 (48)   68-578          Resident, Index
$OBJECT_ID                 (64)   0-256           Resident
$SECURITY_DESCRIPTOR       (80)   No Limit        Non-resident
$VOLUME_NAME               (96)   2-256           Resident
$VOLUME_INFORMATION        (112)  12-12           Resident
$DATA                      (128)  No Limit        (None)
$INDEX_ROOT                (144)  No Limit        Resident
$INDEX_ALLOCATION          (160)  No Limit        Non-resident
$BITMAP                    (176)  No Limit        Non-resident
$REPARSE_POINT             (192)  0-16384         Non-resident
$EA_INFORMATION            (208)  8-8             Resident
$EA                        (224)  0-65536         (None)
$LOGGED_UTILITY_STREAM     (256)  0-65536         Non-resident

Reported-by: woot000 <woot000@woot000.com>
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/ntfs/attrib.c

index 97b660eaa00c116156db70432e811907a063c39b..7ab3571cc5f953b7456985ab2e41573583bbd8f4 100644 (file)
@@ -583,24 +583,13 @@ static u32 ntfs_resident_attr_min_value_length(const __le32 type)
        case AT_STANDARD_INFORMATION:
                return offsetof(struct standard_information, ver) +
                       sizeof(((struct standard_information *)0)->ver.v1.reserved12);
-       case AT_ATTRIBUTE_LIST:
-               return offsetof(struct attr_list_entry, name);
        case AT_FILE_NAME:
-               return offsetof(struct file_name_attr, file_name);
-       case AT_OBJECT_ID:
-               return sizeof(struct guid);
-       case AT_SECURITY_DESCRIPTOR:
-               return sizeof(struct security_descriptor_relative);
+               return offsetof(struct file_name_attr, file_name) +
+                       sizeof(__le16) * 1;
        case AT_VOLUME_INFORMATION:
                return sizeof(struct volume_information);
-       case AT_INDEX_ROOT:
-               return sizeof(struct index_root);
-       case AT_REPARSE_POINT:
-               return offsetof(struct reparse_point, reparse_data);
        case AT_EA_INFORMATION:
                return sizeof(struct ea_information);
-       case AT_EA:
-               return offsetof(struct ea_attr, ea_name) + 1;
        default:
                return 0;
        }