]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* kern/mm.c (grub_mm_init_region): Check for region size after aligning
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 3 May 2010 11:07:31 +0000 (13:07 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 3 May 2010 11:07:31 +0000 (13:07 +0200)
pointers.

ChangeLog
kern/mm.c

index 96cfb2ebf9140dbaf93ee4d9307205bea1d87cd2..f06602d530be4fa21d3abf4c402b42c7f5f33adf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-05-01  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * kern/mm.c (grub_mm_init_region): Check for region size after aligning
+       pointers.
+
 2010-05-01  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * kern/mm.c (grub_real_malloc): Fix size calculation when extra == 0.
index d79f5ce29bfbc11c9d2d90566e1b54676ed0727a..28802945c8970b8316e39c06e21efcbe0f253fa7 100644 (file)
--- a/kern/mm.c
+++ b/kern/mm.c
@@ -148,15 +148,14 @@ grub_mm_init_region (void *addr, grub_size_t size)
   grub_printf ("Using memory for heap: start=%p, end=%p\n", addr, addr + (unsigned int) size);
 #endif
 
-  /* If this region is too small, ignore it.  */
-  if (size < GRUB_MM_ALIGN * 2)
-    return;
-
   /* Allocate a region from the head.  */
-  r = (grub_mm_region_t) (((grub_addr_t) addr + GRUB_MM_ALIGN - 1)
-                         & (~(GRUB_MM_ALIGN - 1)));
+  r = (grub_mm_region_t) ALIGN_UP ((grub_addr_t) addr, GRUB_MM_ALIGN);
   size -= (char *) r - (char *) addr + sizeof (*r);
 
+  /* If this region is too small, ignore it.  */
+  if (size < GRUB_MM_ALIGN)
+    return;
+
   h = (grub_mm_header_t) ((char *) r + GRUB_MM_ALIGN);
   h->next = h;
   h->magic = GRUB_MM_FREE_MAGIC;