From c7686fdf4e1147283efb66e019eed6dd9865a855 Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Tue, 17 Jan 2017 16:18:26 +0900 Subject: [PATCH] execve(): fix memory leak --- kernel/syscall.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/syscall.c b/kernel/syscall.c index 31449c91..201453d1 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -1908,6 +1908,7 @@ SYSCALL_DECLARE(execve) if (ret != 0) { dkprintf("execve(): ERROR: host failed to load elf header, errno: %d\n", ret); + ihk_mc_free_pages(desc, 1); return -ret; } @@ -1931,6 +1932,7 @@ SYSCALL_DECLARE(execve) kprintf("ERROR: no argv for executable: %s?\n", kfilename? kfilename: ""); if(kfilename) kfree(kfilename); + ihk_mc_free_pages(desc, 1); return -EINVAL; } @@ -1999,6 +2001,10 @@ SYSCALL_DECLARE(execve) dkprintf("execve(): switching to new process\n"); proc->execed = 1; + ihk_mc_free_pages(desc, 1); + kfree(argv_flat); + kfree(envp_flat); + /* Lock run queue because enter_user_mode expects to release it */ cpu_local_var(runq_irqstate) = ihk_mc_spinlock_lock(&(get_this_cpu_local_var()->runq_lock));