* kern/mm.c (grub_real_malloc): Satisfy alignment requirement when

extra == 0.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-03-14 23:56:13 +01:00
parent 0cdc2a095b
commit 1159bdce4a
2 changed files with 19 additions and 1 deletions

4
ChangeLog.memalign_fix Normal file
View file

@ -0,0 +1,4 @@
2010-03-14 Vladimir Serbinenko <phcoder@gmail.com>
* kern/mm.c (grub_real_malloc): Satisfy alignment requirement when
extra == 0.

View file

@ -223,7 +223,7 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align)
q->next = p->next;
p->magic = GRUB_MM_ALLOC_MAGIC;
}
else if (extra == 0 || p->size == n + extra)
else if (align == 1 || p->size == n + extra)
{
/* There might be alignment requirement, when taking it into
account memory block fits in.
@ -240,11 +240,25 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align)
| alloc, size=n | |
+---------------+ v
*/
p->size -= n;
p += p->size;
p->size = n;
p->magic = GRUB_MM_ALLOC_MAGIC;
}
else if (extra == 0)
{
grub_mm_header_t r;
p->magic = GRUB_MM_ALLOC_MAGIC;
p->size = n;
r = p + extra + n;
r->magic = GRUB_MM_FREE_MAGIC;
r->size = p->size - extra - n;
r->next = p->next;
q->next = r;
}
else
{
/* There is alignment requirement and there is room in memory