]> git.hungrycats.org Git - linux/commitdiff
[PATCH] do_no_page leak fix
authorAndrew Morton <akpm@osdl.org>
Mon, 19 Jan 2004 13:09:20 +0000 (05:09 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Mon, 19 Jan 2004 13:09:20 +0000 (05:09 -0800)
We leak a page in do_no_page() if pte_chain_alloc fails.

mm/memory.c

index 7d8a8ed531438e1a5928af2751a7e969c4b67160..f1c49a218663d07119296e673477ff661ba7074d 100644 (file)
@@ -1433,10 +1433,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);
@@ -1493,6 +1491,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);