summaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorRommel Custodio <sessyargc+uboot@gmail.com>2013-07-21 10:53:25 +0200
committerTom Rini <trini@ti.com>2013-07-22 10:09:30 -0400
commit8b415f703f88d1d3b0466830047affbbf7f24913 (patch)
tree091065fb1ea38405155a4ed0fffa53a2a82a031d /fs/ext4
parentb899fa39019c8fecb508f747525dd8c22622e804 (diff)
downloadtalos-obmc-uboot-8b415f703f88d1d3b0466830047affbbf7f24913.tar.gz
talos-obmc-uboot-8b415f703f88d1d3b0466830047affbbf7f24913.zip
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>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/ext4_common.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index 277629380f..ff9c4ecd93 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -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);
OpenPOWER on IntegriCloud