On Thu, 19 Apr 2012 16:54:50 +0800
Sha Zhengju<handai.szj@xxxxxxxxx> wrote:
From: Sha Zhengju<handai.szj@xxxxxxxxxx>How serious is this leak? Is there any way in which it can be used to
When the last event is unregistered, there is no need to keep the spare
array anymore. So free it to avoid memory leak.
consume unbounded amounts of memory?
--- a/mm/memcontrol.cThe resulting code is really quite convoluted. Try to read through it
+++ b/mm/memcontrol.c
@@ -4412,6 +4412,12 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
swap_buffers:
/* Swap primary and spare array */
thresholds->spare = thresholds->primary;
+ /* If all events are unregistered, free the spare array */
+ if (!new) {
+ kfree(thresholds->spare);
+ thresholds->spare = NULL;
+ }
+
rcu_assign_pointer(thresholds->primary, new);
and follow the handling of ->primary and ->spare. Head spins.
What is the protocol here? If ->primary is NULL then ->spare must also
be NULL?
I'll apply the patch, although I don't (yet) have sufficient info to
know which kernels it should be applied to. Perhaps someone could
revisit this code and see if it can be made more straightforward.
.