Accessing array using index of uint64 type makes MSVC compiler to
include `__allmul` function in NOOPT which is not referenced in IA32.
So we null-terminates string using ReadSize, which should be equal to
SymlinkSizeTmp after correct reading. Also adds missing MultU64x32
in Ext4Read.

Cc: Marvin Häuser <mhaeu...@posteo.de>
Cc: Pedro Falcato <pedro.falc...@gmail.com>
Cc: Vitaly Cheptsov <vit9...@protonmail.com>
Fixes: 7c46116b0e18 ("Ext4Pkg: Add ext2/3 support")
Fixes: e81432fbacb7 ("Ext4Pkg: Add symbolic links support")
Signed-off-by: Savva Mitrofanov <savva...@gmail.com>
---
 Features/Ext4Pkg/Ext4Dxe/Inode.c   |  4 ++--
 Features/Ext4Pkg/Ext4Dxe/Symlink.c | 12 ++++++------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/Features/Ext4Pkg/Ext4Dxe/Inode.c b/Features/Ext4Pkg/Ext4Dxe/Inode.c
index 90e3eb88f523..8db051d3c444 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Inode.c
+++ b/Features/Ext4Pkg/Ext4Dxe/Inode.c
@@ -152,7 +152,7 @@ Ext4Read (
       } else {

         // Uninitialized extents behave exactly the same as file holes, except 
they have

         // blocks already allocated to them.

-        HoleLen = (Ext4GetExtentLength (&Extent) * Partition->BlockSize) - 
HoleOff;

+        HoleLen = MultU64x32 (Ext4GetExtentLength (&Extent), 
Partition->BlockSize) - HoleOff;

       }

 

       WasRead = HoleLen > RemainingRead ? RemainingRead : (UINTN)HoleLen;

@@ -166,7 +166,7 @@ Ext4Read (
                            Partition->BlockSize

                            );

       ExtentLengthBytes  = Extent.ee_len * Partition->BlockSize;

-      ExtentLogicalBytes = (UINT64)Extent.ee_block * Partition->BlockSize;

+      ExtentLogicalBytes = MultU64x32 ((UINT64)Extent.ee_block, 
Partition->BlockSize);

       ExtentOffset       = CurrentSeek - ExtentLogicalBytes;

       ExtentMayRead      = (UINTN)(ExtentLengthBytes - ExtentOffset);

 

diff --git a/Features/Ext4Pkg/Ext4Dxe/Symlink.c 
b/Features/Ext4Pkg/Ext4Dxe/Symlink.c
index 19b357ac6ba0..8b1511a38b55 100644
--- a/Features/Ext4Pkg/Ext4Dxe/Symlink.c
+++ b/Features/Ext4Pkg/Ext4Dxe/Symlink.c
@@ -1,7 +1,7 @@
 /** @file

   Symbolic links routines

 

-  Copyright (c) 2022 Savva Mitrofanov All rights reserved.

+  Copyright (c) 2022-2023 Savva Mitrofanov All rights reserved.

   SPDX-License-Identifier: BSD-2-Clause-Patent

 **/

 

@@ -155,11 +155,6 @@ Ext4ReadSlowSymlink (
     return Status;

   }

 

-  //

-  // Add null-terminator

-  //

-  SymlinkTmp[SymlinkSizeTmp] = '\0';

-

   if (SymlinkSizeTmp != ReadSize) {

     DEBUG ((

       DEBUG_FS,

@@ -168,6 +163,11 @@ Ext4ReadSlowSymlink (
     return EFI_VOLUME_CORRUPTED;

   }

 

+  //

+  // Add null-terminator

+  //

+  SymlinkTmp[ReadSize] = '\0';

+

   *AsciiSymlinkSize = SymlinkAllocateSize;

   *AsciiSymlink     = SymlinkTmp;

 

-- 
2.39.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#99146): https://edk2.groups.io/g/devel/message/99146
Mute This Topic: https://groups.io/mt/96562700/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to