diff options
author | Yuwei Chen <yuwei.chen@intel.com> | 2025-07-09 13:26:40 +0800 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2025-07-30 02:44:25 +0000 |
commit | a60334ad59eb8b6f2f056febeb0c2b5ed20c7b57 (patch) | |
tree | 323841f4448fd39c7e57b6cfcd12937e80f9171c /BaseTools/Source/Python | |
parent | 491530abaa5552805ed5c2be70ccfe1b0fcd0216 (diff) | |
download | edk2-a60334ad59eb8b6f2f056febeb0c2b5ed20c7b57.zip edk2-a60334ad59eb8b6f2f056febeb0c2b5ed20c7b57.tar.gz edk2-a60334ad59eb8b6f2f056febeb0c2b5ed20c7b57.tar.bz2 |
BaseTools: Fix FMMT FvHandler Padding operation issuesecurity-advisory/cve-2025-xxxxx/advisory
When using the FMMT FvHandler function, new padding size
should be calculated correctly comparing with origin ffs
and new ffs, else it will cause the binary size changes.
This patch is used to fix the bug.
Signed-off-by: Yuwei Chen <yuwei.chen@intel.com>
Diffstat (limited to 'BaseTools/Source/Python')
-rw-r--r-- | BaseTools/Source/Python/FMMT/core/FvHandler.py | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/BaseTools/Source/Python/FMMT/core/FvHandler.py b/BaseTools/Source/Python/FMMT/core/FvHandler.py index 6d6a9c2..12d52c1 100644 --- a/BaseTools/Source/Python/FMMT/core/FvHandler.py +++ b/BaseTools/Source/Python/FMMT/core/FvHandler.py @@ -237,11 +237,20 @@ class FvHandler: Size_delta = len(CompressedData) - len(TargetTree.Data.OriData)
ChangeSize(TargetTree, -Size_delta)
if TargetTree.NextRel:
+ Original_Pad_Size = len(TargetTree.Data.PadData)
TargetTree.Data.PadData = b'\x00' * New_Pad_Size
- self.Remain_New_Free_Space = len(TargetTree.Data.OriData) + len(TargetTree.Data.PadData) - len(CompressedData) - New_Pad_Size
+ self.Remain_New_Free_Space = (
+ len(TargetTree.Data.OriData) +
+ Original_Pad_Size -
+ len(CompressedData) -
+ New_Pad_Size
+ )
else:
TargetTree.Data.PadData = b''
- self.Remain_New_Free_Space = len(TargetTree.Data.OriData) - len(CompressedData)
+ self.Remain_New_Free_Space = (
+ len(TargetTree.Data.OriData) -
+ len(CompressedData)
+ )
TargetTree.Data.OriData = CompressedData
elif len(CompressedData) == len(TargetTree.Data.OriData):
TargetTree.Data.OriData = CompressedData
@@ -347,15 +356,24 @@ class FvHandler: ModifySectionType(ParTree)
Needed_Space += ParTree.Data.HeaderLength - OriHeaderLen
# Update needed space with Delta_Pad_Size
+ Original_Pad_Size = len(ParTree.Data.PadData)
if ParTree.NextRel:
New_Pad_Size = GetPadSize(ParTree.Data.Size, SECTION_COMMON_ALIGNMENT)
- Delta_Pad_Size = New_Pad_Size - len(ParTree.Data.PadData)
+ Delta_Pad_Size = New_Pad_Size - Original_Pad_Size
ParTree.Data.PadData = b'\x00' * New_Pad_Size
Needed_Space += Delta_Pad_Size
else:
ParTree.Data.PadData = b''
if Needed_Space < 0:
- self.Remain_New_Free_Space = len(ParTree.Data.OriData) - len(CompressedData)
+ if ParTree.NextRel:
+ self.Remain_New_Free_Space = (
+ len(ParTree.Data.OriData) + Original_Pad_Size -
+ len(CompressedData) - New_Pad_Size
+ )
+ else:
+ self.Remain_New_Free_Space = (
+ len(ParTree.Data.OriData) - len(CompressedData)
+ )
# If current section is not guided section
elif Needed_Space:
ChangeSize(ParTree, -Needed_Space)
|