X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fbigalloc.c;h=9581188cc046f8171241ef5bfde20e64a44e5a0c;hb=dc63fe59d2bb4c3eb8be67790a55069c8c0a46a9;hp=ee84b7b5e6efa0362e6047391a9433f9b6d4ad1e;hpb=1386442ebc5b681b0ded431880198e3beb6da483;p=libucw.git diff --git a/lib/bigalloc.c b/lib/bigalloc.c index ee84b7b5..9581188c 100644 --- a/lib/bigalloc.c +++ b/lib/bigalloc.c @@ -60,16 +60,17 @@ big_round(u64 len) void * big_alloc(u64 len) { - len = big_round(len); - if (len > SIZE_MAX - 2*CPU_PAGE_SIZE) + u64 l = big_round(len); + if (l > SIZE_MAX - 2*CPU_PAGE_SIZE) die("big_alloc: Size %llu is too large for the current architecture", (long long) len); #ifdef CONFIG_DEBUG - len += 2*CPU_PAGE_SIZE; + l += 2*CPU_PAGE_SIZE; #endif - byte *p = page_alloc(len); + byte *p = page_alloc(l); #ifdef CONFIG_DEBUG + *(u64*)p = len; mprotect(p, CPU_PAGE_SIZE, PROT_NONE); - mprotect(p+len-CPU_PAGE_SIZE, CPU_PAGE_SIZE, PROT_NONE); + mprotect(p+l-CPU_PAGE_SIZE, CPU_PAGE_SIZE, PROT_NONE); p += CPU_PAGE_SIZE; #endif return p; @@ -87,12 +88,14 @@ void big_free(void *start, u64 len) { byte *p = start; - len = big_round(len); + u64 l = big_round(len); #ifdef CONFIG_DEBUG p -= CPU_PAGE_SIZE; - len += 2*CPU_PAGE_SIZE; + mprotect(p, CPU_PAGE_SIZE, PROT_READ); + ASSERT(*(u64*)p == len); + l += 2*CPU_PAGE_SIZE; #endif - page_free(p, len); + page_free(p, l); } #ifdef TEST