]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Fix oops in alloc_zeroed_user_highpage() when page is NULL
authorMichael Ellerman <michael@ellerman.id.au>
Tue, 8 Feb 2005 23:35:29 +0000 (15:35 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 8 Feb 2005 23:35:29 +0000 (15:35 -0800)
The generic and IA-64 versions of alloc_zeroed_user_highpage() don't
check the return value from alloc_page_vma().  This can lead to an oops
if we're OOM.

This fixes my oops on PPC64, but I haven't got an IA-64 machine/compiler
handy.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
include/asm-ia64/page.h
include/linux/highmem.h

index 1991944ddfd95d263381778aa3edcc903d23db5f..24770c011fd87a0a88d3ee69c89fbdef0ac50521 100644 (file)
@@ -79,7 +79,8 @@ do {                                          \
 #define alloc_zeroed_user_highpage(vma, vaddr) \
 ({                                             \
        struct page *page = alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO, vma, vaddr); \
-       flush_dcache_page(page);                \
+       if (page)                               \
+               flush_dcache_page(page);        \
        page;                                   \
 })
 
index 11d84c93af713d44788a7ed72e884dca6856662e..2a7e6c65c882f6b17b1d4037ed1c8a25637d7455 100644 (file)
@@ -48,7 +48,9 @@ alloc_zeroed_user_highpage(struct vm_area_struct *vma, unsigned long vaddr)
 {
        struct page *page = alloc_page_vma(GFP_HIGHUSER, vma, vaddr);
 
-       clear_user_highpage(page, vaddr);
+       if (page)
+               clear_user_highpage(page, vaddr);
+
        return page;
 }
 #endif