From: IWAMOTO Toshihiro I found linux-2.6.0-test11 leaks memory when execve fails. I've also checked the bitkeeper tree and the problem seems to be unchanged. The attached patch is a partial backout of bitkeeper rev. 1.87 of fs/exec.c. I guess the original change was a simple mistake. (free_arg_pages() is a NOP when CONFIG_MMU is defined). fs/exec.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletion(-) diff -puN fs/exec.c~execve-memleak-fix fs/exec.c --- 25/fs/exec.c~execve-memleak-fix 2003-12-22 01:29:29.000000000 -0800 +++ 25-akpm/fs/exec.c 2003-12-22 01:29:29.000000000 -0800 @@ -1085,6 +1085,7 @@ int do_execve(char * filename, struct linux_binprm bprm; struct file *file; int retval; + int i; sched_balance_exec(); @@ -1153,7 +1154,11 @@ int do_execve(char * filename, out: /* Something went wrong, return the inode and free the argument pages*/ - free_arg_pages(&bprm); + for (i = 0 ; i < MAX_ARG_PAGES ; i++) { + struct page * page = bprm.page[i]; + if (page) + __free_page(page); + } if (bprm.security) security_bprm_free(&bprm); _