Replace EXT4_BLOCK_NR with 32-bit EXT2_BLOCK_NR in BlockMap, because we consider BlockMap is 32-bit fs ext2/3 feature
Cc: Marvin Häuser <mhaeu...@posteo.de> Cc: Pedro Falcato <pedro.falc...@gmail.com> Cc: Vitaly Cheptsov <vit9...@protonmail.com> Signed-off-by: Savva Mitrofanov <savva...@gmail.com> --- Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h | 1 + Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h | 2 +- Features/Ext4Pkg/Ext4Dxe/BlockMap.c | 14 ++++++++++---- Features/Ext4Pkg/Ext4Dxe/Extents.c | 3 ++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h b/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h index a55cd2fa68ad..3aef6f0e5bb4 100644 --- a/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h +++ b/Features/Ext4Pkg/Ext4Dxe/Ext4Disk.h @@ -463,6 +463,7 @@ typedef struct { #define EXT4_EXTENT_MAX_INITIALIZED (1 << 15) typedef UINT64 EXT4_BLOCK_NR; +typedef UINT32 EXT2_BLOCK_NR; typedef UINT32 EXT4_INO_NR; // 2 is always the root inode number in ext4 diff --git a/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h b/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h index b1508482b0a7..b446488b2112 100644 --- a/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h +++ b/Features/Ext4Pkg/Ext4Dxe/Ext4Dxe.h @@ -1165,7 +1165,7 @@ EFI_STATUS Ext4GetBlocks ( IN EXT4_PARTITION *Partition, IN EXT4_FILE *File, - IN EXT4_BLOCK_NR LogicalBlock, + IN EXT2_BLOCK_NR LogicalBlock, OUT EXT4_EXTENT *Extent ); diff --git a/Features/Ext4Pkg/Ext4Dxe/BlockMap.c b/Features/Ext4Pkg/Ext4Dxe/BlockMap.c index 1a06ac9fbf86..3d9e16035bee 100644 --- a/Features/Ext4Pkg/Ext4Dxe/BlockMap.c +++ b/Features/Ext4Pkg/Ext4Dxe/BlockMap.c @@ -70,7 +70,7 @@ UINTN Ext4GetBlockPath ( IN CONST EXT4_PARTITION *Partition, IN UINT32 LogicalBlock, - OUT EXT4_BLOCK_NR BlockPath[EXT4_MAX_BLOCK_PATH] + OUT EXT2_BLOCK_NR BlockPath[EXT4_MAX_BLOCK_PATH] ) { // The logic behind the block map is very much like a page table @@ -213,12 +213,12 @@ EFI_STATUS Ext4GetBlocks ( IN EXT4_PARTITION *Partition, IN EXT4_FILE *File, - IN EXT4_BLOCK_NR LogicalBlock, + IN EXT2_BLOCK_NR LogicalBlock, OUT EXT4_EXTENT *Extent ) { EXT4_INODE *Inode; - EXT4_BLOCK_NR BlockPath[EXT4_MAX_BLOCK_PATH]; + EXT2_BLOCK_NR BlockPath[EXT4_MAX_BLOCK_PATH]; UINTN BlockPathLength; UINTN Index; UINT32 *Buffer; @@ -272,7 +272,13 @@ Ext4GetBlocks ( } } - Ext4GetExtentInBlockMap (Buffer, Partition->BlockSize / sizeof (UINT32), BlockPath[BlockPathLength - 1], Extent); + Ext4GetExtentInBlockMap ( + Buffer, + Partition->BlockSize / sizeof (UINT32), + BlockPath[BlockPathLength - 1], + Extent + ); + FreePool (Buffer); return EFI_SUCCESS; diff --git a/Features/Ext4Pkg/Ext4Dxe/Extents.c b/Features/Ext4Pkg/Ext4Dxe/Extents.c index c3874df71751..c5951f78aa62 100644 --- a/Features/Ext4Pkg/Ext4Dxe/Extents.c +++ b/Features/Ext4Pkg/Ext4Dxe/Extents.c @@ -259,7 +259,8 @@ Ext4GetExtent ( if (!(Inode->i_flags & EXT4_EXTENTS_FL)) { // If this is an older ext2/ext3 filesystem, emulate Ext4GetExtent using the block map - Status = Ext4GetBlocks (Partition, File, LogicalBlock, Extent); + // We cast LogicalBlock to UINT32, considering ext2/3 are 32-bit + Status = Ext4GetBlocks (Partition, File, (UINT32) LogicalBlock, Extent); if (!EFI_ERROR (Status)) { Ext4CacheExtents (File, Extent, 1); -- 2.37.0 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91649): https://edk2.groups.io/g/devel/message/91649 Mute This Topic: https://groups.io/mt/92531465/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-