Patch "uprobes: Fix the memcg accounting" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
uprobes: Fix the memcg accounting
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
uprobes-fix-the-memcg-accounting.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6c4687cc17a788a6dd8de3e27dbeabb7cbd3e066Mon Sep 17 00:00:00 2001
From: Oleg Nesterov <[email protected]>
Date: Wed, 17 Aug 2016 17:36:29 +0200
Subject: uprobes: Fix the memcg accounting
From: Oleg Nesterov <[email protected]>
commit 6c4687cc17a788a6dd8de3e27dbeabb7cbd3e066 upstream.
__replace_page() wronlgy calls mem_cgroup_cancel_charge() in "success" path, it should only do this if page_check_address() fails.
This means that every enable/disable leads to unbalanced mem_cgroup_uncharge() from put_page(old_page), it is trivial to underflow the page_counter->count and trigger OOM.
--- kernel/events/uprobes.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/events/uprobes.c +3 -2
@@ -171,8 +171,10 @@ static int __replace_page(struct vm_areammu_notifier_invalidate_range_start (mm, mmun_start, mmun_end); err = -EAGAIN ; ptep =page_check_address (page, mm, addr, &ptl,0 ); -if (!ptep) +if (!ptep) { +mem_cgroup_cancel_charge (kpage, memcg); goto unlock; + }get_page (kpage);page_add_new_anon_rmap (kpage, vma, addr);
@@ -199,7 +201,6 @@ static int __replace_page(struct vm_area err =0 ; unlock: -mem_cgroup_cancel_charge (kpage, memcg);mmu_notifier_invalidate_range_end (mm, mmun_start, mmun_end);unlock_page (page);return err;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/uprobes-fix-the-memcg-accounting.patch queue-4.4/cgroup-reduce-read-locked-section-of-cgroup_threadgroup_rwsem-during-fork.patch