Hi Tian,

Do you have any comments on this patch?

Thanks!

On 06/05/2015 09:57 AM, Heyi Guo wrote:
> Hi Ard,
>
> I got this error when running SCT against QEMU AARCH64 UEFI. I think 
> it will only happen for aarch64 runtime services allocation, because 
> only this type of memory requires more than 4 pages alignment, which 
> will trigger the bug. If we use the same alignment (e.g. 64KB) for 
> both boot and runtime memory, it just avoid the bug indirectly, as 
> each descriptor would be kept naturally aligned with 64KB.
>
> Thanks.
>
> On 06/05/2015 12:08 AM, Ard Biesheuvel wrote:
>> 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

Reply via email to