Wrong directory block number can be saved in ->previous on big endian
system in parse_int_node(). Fix it by moving the mask out of the endian
conversion.
Fixes: ae9efd05a986 ("e2fsck: 3 level hash tree directory optimization")
Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
printf("Entry #%d: Hash 0x%08x, block %u\n", i,
hash, ext2fs_le32_to_cpu(ent[i].block));
#endif
- blk = ext2fs_le32_to_cpu(ent[i].block) & 0x0ffffff;
+ blk = ext2fs_le32_to_cpu(ent[i].block) & EXT4_DX_BLOCK_MASK;
/* Check to make sure the block is valid */
if (blk >= (blk_t) dx_dir->numblocks) {
cd->pctx.blk = blk;
}
dx_db->previous =
- i ? ext2fs_le32_to_cpu(ent[i-1].block & 0x0ffffff) : 0;
+ i ? (ext2fs_le32_to_cpu(ent[i-1].block) &
+ EXT4_DX_BLOCK_MASK) : 0;
if (hash < min_hash)
min_hash = hash;
#define EXT2_HASH_FLAG_INCOMPAT 0x1
+#define EXT4_DX_BLOCK_MASK 0x0fffffff
+
struct ext2_dx_entry {
__le32 hash;
__le32 block;