Re: [RFC PATCH 1/1] mm/percpu.c: fix potential memory leakage for pcpu_embed_first_chunk()
From: Tejun Heo <tj@kernel.org>
Date: 2016-09-29 16:44:37
Also in:
lkml
Hello, On Fri, Sep 30, 2016 at 12:03:20AM +0800, zijun_hu wrote:
From: zijun_hu <redacted> it will cause memory leakage for pcpu_embed_first_chunk() to go to label @out_free if the chunk spans over 3/4 VMALLOC area. all memory are allocated and recorded into array @areas for each CPU group, but the memory allocated aren't be freed before returning after going to label @out_free in order to fix this bug, we check chunk spanned area immediately after completing memory allocation for all CPU group, we go to label @out_free_areas other than @out_free to free all memory allocated if the checking is failed. Signed-off-by: zijun_hu <redacted>
...
quoted hunk ↗ jump to hunk
@@ -2000,6 +2001,21 @@ int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size, areas[group] = ptr; base = min(ptr, base); + if (ptr > areas[j]) + j = group; + } + max_distance = areas[j] - base; + max_distance += ai->unit_size * ai->groups[j].nr_units; + + /* warn if maximum distance is further than 75% of vmalloc space */ + if (max_distance > VMALLOC_TOTAL * 3 / 4) { + pr_warn("max_distance=0x%lx too large for vmalloc space 0x%lx\n", + max_distance, VMALLOC_TOTAL); +#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK + /* and fail if we have fallback */ + rc = -EINVAL; + goto out_free_areas; +#endif
Isn't it way simpler to make the error path jump to out_free_areas? There's another similar case after pcpu_setup_first_chunk() failure too. Also, can you please explain how you tested the changes? Thanks. -- tejun -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>