Branch: refs/heads/master
  Home:   https://github.com/tianocore/edk2
  Commit: 54d81d06fc165fcb8eb832acd6a7cf644b029549
      
https://github.com/tianocore/edk2/commit/54d81d06fc165fcb8eb832acd6a7cf644b029549
  Author: Ard Biesheuvel <a...@kernel.org>
  Date:   2022-12-08 (Thu, 08 Dec 2022)

  Changed paths:
    M MdeModulePkg/Core/Dxe/Mem/Page.c

  Log Message:
  -----------
  MdeModulePkg/DxeCore: Use correct type for alignment mask

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 <a...@kernel.org>
Reported-by: Nathan Chancellor <nat...@kernel.org>
Reviewed-by: Michael D Kinney <michael.d.kin...@intel.com>




_______________________________________________
edk2-commits mailing list
edk2-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to