diff --git a/mm/memory.c b/mm/memory.c index ee2925998e2e2e71ba3db28cb603666a293264bc..cfddcd2075b9bd5defcb07f206e8fed435146214 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1055,6 +1055,14 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, do { struct page *page; + /* + * If tsk is ooming, cut off its access to large memory + * allocations. It has a pending SIGKILL, but it can't + * be processed until returning to user space. + */ + if (unlikely(test_tsk_thread_flag(tsk, TIF_MEMDIE))) + return -ENOMEM; + if (write) foll_flags |= FOLL_WRITE;