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

[Xen-devel] [PATCH v2 2/6] relocator: Do not use memory region if its starta is smaller than size



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 <daniel.kiper@xxxxxxxxxx>
---
 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)
          {
            target = starta - size;
            if (target > end - size)
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.