mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-17 12:41:32 +00:00
ext4fs: le32_to_cpu() used on a 16-bit field
Fix reading ext4_extent_header struture on BE machines. Some 16 bit fields where converted to 32 bit fields, due to the byte swap on BE machines the containing value was corrupted. Therefore reading ext4 filesystems on BE machines where broken before. Signed-off-by: Rommel Custodio <sessyargc+uboot@gmail.com> [sent via git-send-email; rework commit message] Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org> Tested-by: Lukasz Majewski <l.majewski@samsung.com>
This commit is contained in:
parent
b899fa3901
commit
8b415f703f
1 changed files with 6 additions and 6 deletions
|
@ -1432,7 +1432,7 @@ static struct ext4_extent_header *ext4fs_get_extent_block
|
|||
while (1) {
|
||||
index = (struct ext4_extent_idx *)(ext_block + 1);
|
||||
|
||||
if (le32_to_cpu(ext_block->eh_magic) != EXT4_EXT_MAGIC)
|
||||
if (le16_to_cpu(ext_block->eh_magic) != EXT4_EXT_MAGIC)
|
||||
return 0;
|
||||
|
||||
if (ext_block->eh_depth == 0)
|
||||
|
@ -1440,14 +1440,14 @@ static struct ext4_extent_header *ext4fs_get_extent_block
|
|||
i = -1;
|
||||
do {
|
||||
i++;
|
||||
if (i >= le32_to_cpu(ext_block->eh_entries))
|
||||
if (i >= le16_to_cpu(ext_block->eh_entries))
|
||||
break;
|
||||
} while (fileblock > le32_to_cpu(index[i].ei_block));
|
||||
|
||||
if (--i < 0)
|
||||
return 0;
|
||||
|
||||
block = le32_to_cpu(index[i].ei_leaf_hi);
|
||||
block = le16_to_cpu(index[i].ei_leaf_hi);
|
||||
block = (block << 32) + le32_to_cpu(index[i].ei_leaf_lo);
|
||||
|
||||
if (ext4fs_devread((lbaint_t)block << log2_blksz, 0, fs->blksz,
|
||||
|
@ -1548,17 +1548,17 @@ long int read_allocated_block(struct ext2_inode *inode, int fileblock)
|
|||
|
||||
do {
|
||||
i++;
|
||||
if (i >= le32_to_cpu(ext_block->eh_entries))
|
||||
if (i >= le16_to_cpu(ext_block->eh_entries))
|
||||
break;
|
||||
} while (fileblock >= le32_to_cpu(extent[i].ee_block));
|
||||
if (--i >= 0) {
|
||||
fileblock -= le32_to_cpu(extent[i].ee_block);
|
||||
if (fileblock >= le32_to_cpu(extent[i].ee_len)) {
|
||||
if (fileblock >= le16_to_cpu(extent[i].ee_len)) {
|
||||
free(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
start = le32_to_cpu(extent[i].ee_start_hi);
|
||||
start = le16_to_cpu(extent[i].ee_start_hi);
|
||||
start = (start << 32) +
|
||||
le32_to_cpu(extent[i].ee_start_lo);
|
||||
free(buf);
|
||||
|
|
Loading…
Add table
Reference in a new issue