]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
fs/ntfs3: Fix field-spanning write in INDEX_HDR
authorKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Mon, 17 Jun 2024 12:13:09 +0000 (15:13 +0300)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Wed, 26 Jun 2024 12:48:58 +0000 (15:48 +0300)
Fields flags and res[3] replaced with one 4 byte flags.

Fixes: 4534a70b7056 ("fs/ntfs3: Add headers and misc files")
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/index.c
fs/ntfs3/ntfs.h

index d0f15bbf78f6cf4e1d3e30c85be97c18fe319d2f..9089c58a005ce1b51d0ec291f1dbc6f4b4b0d153 100644 (file)
@@ -978,7 +978,7 @@ static struct indx_node *indx_new(struct ntfs_index *indx,
                hdr->used =
                        cpu_to_le32(eo + sizeof(struct NTFS_DE) + sizeof(u64));
                de_set_vbn_le(e, *sub_vbn);
-               hdr->flags = 1;
+               hdr->flags = NTFS_INDEX_HDR_HAS_SUBNODES;
        } else {
                e->size = cpu_to_le16(sizeof(struct NTFS_DE));
                hdr->used = cpu_to_le32(eo + sizeof(struct NTFS_DE));
@@ -1683,7 +1683,7 @@ static int indx_insert_into_root(struct ntfs_index *indx, struct ntfs_inode *ni,
        e->size = cpu_to_le16(sizeof(struct NTFS_DE) + sizeof(u64));
        e->flags = NTFS_IE_HAS_SUBNODES | NTFS_IE_LAST;
 
-       hdr->flags = 1;
+       hdr->flags = NTFS_INDEX_HDR_HAS_SUBNODES;
        hdr->used = hdr->total =
                cpu_to_le32(new_root_size - offsetof(struct INDEX_ROOT, ihdr));
 
index a5ca08db6dc51d8813d733dd80983433516e030c..241f2ffdd9201a7520bad25de395372f11a5f0e9 100644 (file)
@@ -693,14 +693,15 @@ static inline bool de_has_vcn_ex(const struct NTFS_DE *e)
              offsetof(struct ATTR_FILE_NAME, name) + \
              NTFS_NAME_LEN * sizeof(short), 8)
 
+#define NTFS_INDEX_HDR_HAS_SUBNODES cpu_to_le32(1)
+
 struct INDEX_HDR {
        __le32 de_off;  // 0x00: The offset from the start of this structure
                        // to the first NTFS_DE.
        __le32 used;    // 0x04: The size of this structure plus all
                        // entries (quad-word aligned).
        __le32 total;   // 0x08: The allocated size of for this structure plus all entries.
-       u8 flags;       // 0x0C: 0x00 = Small directory, 0x01 = Large directory.
-       u8 res[3];
+       __le32 flags;   // 0x0C: 0x00 = Small directory, 0x01 = Large directory.
 
        //
        // de_off + used <= total
@@ -748,7 +749,7 @@ static inline struct NTFS_DE *hdr_next_de(const struct INDEX_HDR *hdr,
 
 static inline bool hdr_has_subnode(const struct INDEX_HDR *hdr)
 {
-       return hdr->flags & 1;
+       return hdr->flags & NTFS_INDEX_HDR_HAS_SUBNODES;
 }
 
 struct INDEX_BUFFER {
@@ -768,7 +769,7 @@ static inline bool ib_is_empty(const struct INDEX_BUFFER *ib)
 
 static inline bool ib_is_leaf(const struct INDEX_BUFFER *ib)
 {
-       return !(ib->ihdr.flags & 1);
+       return !(ib->ihdr.flags & NTFS_INDEX_HDR_HAS_SUBNODES);
 }
 
 /* Index root structure ( 0x90 ). */