summaryrefslogtreecommitdiffstats
path: root/mm/memory.c
diff options
context:
space:
mode:
authorOleg Nesterov2008-07-04 18:59:28 +0200
committerLinus Torvalds2008-07-04 19:40:04 +0200
commit7a36a752d006f6874049da510297eeb7f09d92a7 (patch)
tree764d02c44b95e34deb9cd3ed9d7bdc03c35ef172 /mm/memory.c
parentserial: fix serial_match_port() for dynamic major tty-device numbers (diff)
downloadkernel-qcow2-linux-7a36a752d006f6874049da510297eeb7f09d92a7.tar.gz
kernel-qcow2-linux-7a36a752d006f6874049da510297eeb7f09d92a7.tar.xz
kernel-qcow2-linux-7a36a752d006f6874049da510297eeb7f09d92a7.zip
get_user_pages(): fix possible page leak on oom
get_user_pages() must not return the error when i != 0. When pages != NULL we have i get_page()'ed pages. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Acked-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/memory.c')
-rw-r--r--mm/memory.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 350e646032f5..2302d228fe04 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1151,7 +1151,7 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
* be processed until returning to user space.
*/
if (unlikely(test_tsk_thread_flag(tsk, TIF_MEMDIE)))
- return -ENOMEM;
+ return i ? i : -ENOMEM;
if (write)
foll_flags |= FOLL_WRITE;