Commit 6c37dde54e88 ("mm/memcg: improve mem_cgroup_dcache_is_low()
performance.") didn't destroy percpu_counter's on deletion of the memcg.
This is not just memleak but a memory corruption, because global
'percpu_counters' list will conatin pointers to the freed memory:
        ------------[ cut here ]------------
        WARNING: at lib/debugobjects.c:260 debug_print_object+0x17d/0x210()
        ODEBUG: free active (active state 0) object type: percpu_counter hint:  
         (null)
        Call Trace:
         dump_stack+0x1e/0x20
         warn_slowpath_common+0x9f/0x100
         warn_slowpath_fmt+0xc4/0x100
         debug_print_object+0x17d/0x210
         debug_check_no_obj_freed+0x500/0x920
         kfree+0xd6/0x300
         __mem_cgroup_free+0x37e/0x4e0
         mem_cgroup_css_free+0x81/0xa0
         cgroup_free_fn+0xc9/0x4e0
         process_one_work+0x740/0x1910
         worker_thread+0x413/0xbf0
         kthread+0x1e6/0x250
         ret_from_fork+0x58/0x90

Call percpu_counter_destroy() from ___mem_cgroup_free() to fix this.

https://jira.sw.ru/browse/PSBM-69145
Fixes: 6c37dde54e88 ("mm/memcg: improve mem_cgroup_dcache_is_low() 
performance.")
Signed-off-by: Andrey Ryabinin <aryabi...@virtuozzo.com>
---
 mm/memcontrol.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 7264c05d610..4e14af2cadb 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5947,6 +5947,7 @@ out_free:
 static void __mem_cgroup_free(struct mem_cgroup *memcg)
 {
        int node;
+       int i;
 
        mem_cgroup_remove_from_trees(memcg);
        free_css_id(&mem_cgroup_subsys, &memcg->css);
@@ -5954,6 +5955,9 @@ static void __mem_cgroup_free(struct mem_cgroup *memcg)
        for_each_node(node)
                free_mem_cgroup_per_zone_info(memcg, node);
 
+       for (i = 0; i < MEM_CGROUP_STAT2_NSTATS; i++)
+               percpu_counter_destroy(&memcg->stat2.counters[i]);
+
        free_percpu(memcg->stat);
 
        /*
-- 
2.13.0

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to