On 4 June 2015 at 17:55, Heyi Guo <heyi....@linaro.org> wrote: > DescEnd will be clipped for alignment in CoreFindFreePagesI, and it > may fall below DescStart, when alignment is more than 16KB (included) > and both DescStart and original DescEnd fall into a single range of > such alignment. This results in a huge size (Negative number in > unsigned type) for this descriptor, fulfilling the allocation > requirement but failing to run ConvertPages; at last it causes
at least > occasional failure of AllocatePages. > > A simple comparison is added to ensure we would never get a negative > number. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Heyi Guo <heyi....@linaro.org> Acked-by: Ard Biesheuvel <ard.biesheu...@linaro.org> So is this only happening because we use different granularities for boottime and runtime allocations on AArch64? > --- > MdeModulePkg/Core/Dxe/Mem/Page.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c > b/MdeModulePkg/Core/Dxe/Mem/Page.c > index a92c865..f2efaf1 100644 > --- a/MdeModulePkg/Core/Dxe/Mem/Page.c > +++ b/MdeModulePkg/Core/Dxe/Mem/Page.c > @@ -1051,6 +1051,11 @@ CoreFindFreePagesI ( > > DescEnd = ((DescEnd + 1) & (~(Alignment - 1))) - 1; > > + // Skip if DescEnd is less than DescStart after alignment clipping > + if (DescEnd < DescStart) { > + continue; > + } > + > // > // Compute the number of bytes we can used from this > // descriptor, and see it's enough to satisfy the request > -- > 2.1.4 > ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel