X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Flib%2Flibc.cc;fp=kernel%2Flib%2Flibc.cc;h=e571384048458bf9d9ee49e0e593900affd30fe4;hp=60bdee24305d2151edbdcb21ddde258e41c5d3f5;hb=f95829cb521c076eebee345a1007e9fc912a0765;hpb=6ef00363db1c75274dfcc188c778cb437d896034 diff --git a/kernel/lib/libc.cc b/kernel/lib/libc.cc index 60bdee2..e571384 100644 --- a/kernel/lib/libc.cc +++ b/kernel/lib/libc.cc @@ -539,6 +539,8 @@ void *memset(void *b, int ch, size_t len) void *malloc(size_t len) { + assert(len <= Arch::page_size - sizeof(size_t)); + len = (len + sizeof(size_t) + Arch::page_size - 1) / Arch::page_size; Mem::Page *page = Mem::PageAlloc::alloc(len); @@ -551,8 +553,7 @@ void *malloc(size_t len) void free(void *addr) { if (addr) { - size_t *ptr = (size_t *)addr; - ptr--; + size_t *ptr = (size_t *)addr - 1; size_t len = *ptr; Mem::Page *page = Mem::kvirt_to_page(addr); Mem::PageAlloc::free(page, len);