diff options
author | Freya Murphy <freya@freyacat.org> | 2025-05-01 19:52:41 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-05-01 19:52:41 -0400 |
commit | fa9f4baeecd1e18fc2db9192660d0de5d8b54e8c (patch) | |
tree | f4a2435da4699cbe051bd3da832298162ab7de4d /kernel | |
parent | comment out non contigous phys page allocator, its causing problems and this ... (diff) | |
download | comus-fa9f4baeecd1e18fc2db9192660d0de5d8b54e8c.tar.gz comus-fa9f4baeecd1e18fc2db9192660d0de5d8b54e8c.tar.bz2 comus-fa9f4baeecd1e18fc2db9192660d0de5d8b54e8c.zip |
FUCKING OFF BY ONE ERRORS
Diffstat (limited to '')
-rw-r--r-- | kernel/lib/kalloc.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/lib/kalloc.c b/kernel/lib/kalloc.c index 0141149..02e9457 100644 --- a/kernel/lib/kalloc.c +++ b/kernel/lib/kalloc.c @@ -34,7 +34,7 @@ static struct page_header *get_header(void *ptr) static void *alloc_new(size_t size) { - size_t pages = ((size + header_len) / PAGE_SIZE) + 1; + size_t pages = ((size + header_len + PAGE_SIZE - 1) / PAGE_SIZE) * PAGE_SIZE; void *addr = kalloc_pages(pages); void *mem = (char *)addr + header_len; @@ -180,7 +180,7 @@ void kfree(void *ptr) for (neighbor = header->prev; neighbor != NULL; neighbor = neighbor->prev) { if (neighbor->node_number != header->node_number) break; - if (neighbor->used && header->used) + if (neighbor->used || header->used) break; neighbor->free += header->free + header_len; neighbor->next = header->next; |