fs/ntfs3: Fix field-spanning write in INDEX_HDR
[ Upstream commit 2f3e176fee66ac86ae387787bf06457b101d9f7a ]
Fields flags and res[3] replaced with one 4 byte flags.
Fixes: 4534a70b70
("fs/ntfs3: Add headers and misc files")
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Родитель
e3e3b3eb54
Коммит
ebefb924ce
|
@ -979,7 +979,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));
|
||||
|
@ -1684,7 +1684,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));
|
||||
|
||||
|
|
|
@ -686,14 +686,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
|
||||
|
@ -740,7 +741,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 {
|
||||
|
@ -760,7 +761,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 ). */
|
||||
|
|
Загрузка…
Ссылка в новой задаче