grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 2/6] relocator: Do not use memory region if its starta is


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: [PATCH v2 2/6] relocator: Do not use memory region if its starta is smaller than size
Date: Mon, 9 Nov 2015 19:44:23 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Icedove/38.3.0

On 21.07.2015 08:42, Andrei Borzenkov wrote:
> On Mon, Jul 20, 2015 at 5:35 PM, Daniel Kiper <address@hidden> wrote:
>> malloc_in_range() should not use memory region if its starta is smaller
>> than size. Otherwise target wraps around and points to region which is
>> usually not a RAM, e.g.:
>>
>> loader/multiboot.c:93: segment 0: paddr=0x800000, memsz=0x3f800000, 
>> vaddr=0x800000
>> lib/relocator.c:1241: min_addr = 0x0, max_addr = 0xffffffffffffffff, target 
>> = 0x800000
>> lib/relocator.c:434: trying to allocate in 0x800000-0xffffffffffffffff 
>> aligned 0x1 size 0x3f800000
>> lib/relocator.c:434: trying to allocate in 0x0-0x800000 aligned 0x1 size 
>> 0x3f800000
>> lib/relocator.c:434: trying to allocate in 0x0-0xffffffffffffffff aligned 
>> 0x1 size 0x3f800000
>> lib/relocator.c:1188: allocated: 0xffffffffc07fffff+0x3f800000
>> lib/relocator.c:1277: allocated 0xffffffffc07fffff/0x800000
>>
>> Signed-off-by: Daniel Kiper <address@hidden>
>> ---
>>  grub-core/lib/relocator.c |    2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c
>> index f759c7f..4eee0c5 100644
>> --- a/grub-core/lib/relocator.c
>> +++ b/grub-core/lib/relocator.c
>> @@ -748,7 +748,7 @@ malloc_in_range (struct grub_relocator *rel,
>>               /* Found an usable address.  */
>>               goto found;
>>           }
>> -       if (isinsidebefore && !isinsideafter && !from_low_priv)
>> +       if (isinsidebefore && !isinsideafter && !from_low_priv && starta >= 
>> size)
> 
> That's too late, we need to check end of region on previous iteration.
> Consider region of 128 bytes, requested size 129 and alignment 256.
> Than starta still ends up high in memory.
> 
Agreed, we need a check earlier. It makes sense to split this block with
an if (from_low_priv) as both flows are completely separate and
splitting them will make it more readable
>>           {
>>             target = starta - size;
>>             if (target > end - size)
>> --
>> 1.7.10.4
>>
>>
>> _______________________________________________
>> Grub-devel mailing list
>> address@hidden
>> https://lists.gnu.org/mailman/listinfo/grub-devel
> 


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]