+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.
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;