From e7ffb74ad1e4c4e8a4a5e62968f52499dc0c7079 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Sun, 27 Oct 2019 13:36:46 -0400 Subject: fix a potential memory leak --- kernel/vm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'kernel/vm.c') diff --git a/kernel/vm.c b/kernel/vm.c index c5da0c1..3004bb3 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -301,7 +301,8 @@ freewalk(pagetable_t pagetable) void uvmfree(pagetable_t pagetable, uint64 sz) { - uvmunmap(pagetable, 0, sz, 1); + if(sz > 0) + uvmunmap(pagetable, 0, sz, 1); freewalk(pagetable); } -- cgit v1.2.3 From 7f35d7a14efe56905d340a0e318f01c7c514320d Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Fri, 7 Aug 2020 05:32:48 -0400 Subject: modify each page in usertests countfree() get rid of static for walk() and freewalk() --- kernel/vm.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'kernel/vm.c') diff --git a/kernel/vm.c b/kernel/vm.c index 3004bb3..4f65d4e 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -16,9 +16,7 @@ extern char etext[]; // kernel.ld sets this to end of kernel code. extern char trampoline[]; // trampoline.S /* - * create a direct-map page table for the kernel and - * turn on paging. called early, in supervisor mode. - * the page allocator is already initialized. + * create a direct-map page table for the kernel. */ void kvminit() @@ -70,7 +68,7 @@ kvminithart() // 21..39 -- 9 bits of level-1 index. // 12..20 -- 9 bits of level-0 index. // 0..12 -- 12 bits of byte offset within the page. -static pte_t * +pte_t * walk(pagetable_t pagetable, uint64 va, int alloc) { if(va >= MAXVA) @@ -278,7 +276,7 @@ uvmdealloc(pagetable_t pagetable, uint64 oldsz, uint64 newsz) // Recursively free page-table pages. // All leaf mappings must already have been removed. -static void +void freewalk(pagetable_t pagetable) { // there are 2^9 = 512 PTEs in a page table. -- cgit v1.2.3