fs/ntfs3: Fix endian problem
authorKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Mon, 8 May 2023 09:41:24 +0000 (13:41 +0400)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Sun, 2 Jul 2023 20:21:28 +0000 (00:21 +0400)
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/frecord.c
fs/ntfs3/ntfs_fs.h

index be59bd399fd14bde9d375ebcea9629f4b2aea0af..16bd9faa2d28bb807b5dcfb8abe9bc9deaf58936 100644 (file)
@@ -236,6 +236,7 @@ struct ATTRIB *ni_find_attr(struct ntfs_inode *ni, struct ATTRIB *attr,
        return attr;
 
 out:
+       ntfs_inode_err(&ni->vfs_inode, "failed to parse mft record");
        ntfs_set_state(ni->mi.sbi, NTFS_DIRTY_ERROR);
        return NULL;
 }
@@ -1643,14 +1644,13 @@ int ni_delete_all(struct ntfs_inode *ni)
  * Return: File name attribute by its value.
  */
 struct ATTR_FILE_NAME *ni_fname_name(struct ntfs_inode *ni,
-                                    const struct cpu_str *uni,
+                                    const struct le_str *uni,
                                     const struct MFT_REF *home_dir,
                                     struct mft_inode **mi,
                                     struct ATTR_LIST_ENTRY **le)
 {
        struct ATTRIB *attr = NULL;
        struct ATTR_FILE_NAME *fname;
-       struct le_str *fns;
 
        if (le)
                *le = NULL;
@@ -1674,10 +1674,9 @@ next:
        if (uni->len != fname->name_len)
                goto next;
 
-       fns = (struct le_str *)&fname->name_len;
-       if (ntfs_cmp_names_cpu(uni, fns, NULL, false))
+       if (ntfs_cmp_names(uni->name, uni->len, fname->name, uni->len, NULL,
+                          false))
                goto next;
-
        return fname;
 }
 
@@ -2915,7 +2914,7 @@ int ni_remove_name(struct ntfs_inode *dir_ni, struct ntfs_inode *ni,
        /* Find name in record. */
        mi_get_ref(&dir_ni->mi, &de_name->home);
 
-       fname = ni_fname_name(ni, (struct cpu_str *)&de_name->name_len,
+       fname = ni_fname_name(ni, (struct le_str *)&de_name->name_len,
                              &de_name->home, &mi, &le);
        if (!fname)
                return -ENOENT;
index 98b61e4b3215e064d32143a41873b2b74722f439..00fa782fcada0287f7b83018ac04334cc223485c 100644 (file)
@@ -543,7 +543,7 @@ void ni_remove_attr_le(struct ntfs_inode *ni, struct ATTRIB *attr,
                       struct mft_inode *mi, struct ATTR_LIST_ENTRY *le);
 int ni_delete_all(struct ntfs_inode *ni);
 struct ATTR_FILE_NAME *ni_fname_name(struct ntfs_inode *ni,
-                                    const struct cpu_str *uni,
+                                    const struct le_str *uni,
                                     const struct MFT_REF *home,
                                     struct mft_inode **mi,
                                     struct ATTR_LIST_ENTRY **entry);