mirror of
https://git.proxmox.com/git/mirror_edk2
synced 2026-01-03 23:03:03 +00:00
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 | ||