mirror of https://github.com/acidanthera/audk.git
54d81d06fc
The page allocator code in CoreFindFreePagesI() uses a mask derived from its UINTN Alignment argument to align the descriptor end address of a MEMORY_MAP entry to the requested alignment, in order to check whether the descriptor covers enough sufficiently aligned area to satisfy the request. However, on 32-bit architectures, 'Alignment' is a 32-bit type, whereas DescEnd is a 64-bit type, and so the resulting operation performed on the end address comes down to masking with 0xfffff000 instead of the intended 0xffffffff_fffff000. Given the -1 at the end of the expression, the resulting address is 0xffffffff_fffffffff for any descriptor that ends on a 4G aligned boundary, and this is certainly not what was intended. So cast Alignment to UINT64 to ensure that the mask has the right size. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reported-by: Nathan Chancellor <nathan@kernel.org> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> |
||
---|---|---|
.. | ||
Dispatcher | ||
DxeMain | ||
Event | ||
FwVol | ||
FwVolBlock | ||
Gcd | ||
Hand | ||
Image | ||
Library | ||
Mem | ||
Misc | ||
SectionExtraction | ||
DxeCore.uni | ||
DxeCoreExtra.uni | ||
DxeMain.h | ||
DxeMain.inf |