We leak a page in do_no_page() if pte_chain_alloc fails. --- mm/memory.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff -puN mm/memory.c~do_no_page-leak-fix mm/memory.c --- 25/mm/memory.c~do_no_page-leak-fix 2004-01-08 09:50:55.000000000 -0800 +++ 25-akpm/mm/memory.c 2004-01-08 09:51:40.000000000 -0800 @@ -1448,10 +1448,8 @@ retry: */ if (write_access && !(vma->vm_flags & VM_SHARED)) { struct page * page = alloc_page(GFP_HIGHUSER); - if (!page) { - page_cache_release(new_page); + if (!page) goto oom; - } copy_user_highpage(page, new_page, address); page_cache_release(new_page); lru_cache_add_active(page); @@ -1508,6 +1506,7 @@ retry: spin_unlock(&mm->page_table_lock); goto out; oom: + page_cache_release(new_page); ret = VM_FAULT_OOM; out: pte_chain_free(pte_chain); _