mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 11:33:28 +02:00
mm/damon/core: get memcg reference before access
The commitb74a120bcf("mm/damon/core: implement DAMOS_QUOTA_NODE_MEMCG_USED_BP") added accesses to memcg structure without getting reference to it. This is unsafe. Let's get the reference before accessing the memcg. Link: https://lkml.kernel.org/r/20251225002904.139543-1-shakeel.butt@linux.dev Fixes:b74a120bcf("mm/damon/core: implement DAMOS_QUOTA_NODE_MEMCG_USED_BP") Signed-off-by: Shakeel Butt <shakeel.butt@linux.dev> Reviewed-by: SeongJae Park <sj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
582f0f3864
commit
a38be54626
|
|
@ -2051,13 +2051,15 @@ static unsigned long damos_get_node_memcg_used_bp(
|
|||
|
||||
rcu_read_lock();
|
||||
memcg = mem_cgroup_from_id(goal->memcg_id);
|
||||
rcu_read_unlock();
|
||||
if (!memcg) {
|
||||
if (!memcg || !mem_cgroup_tryget(memcg)) {
|
||||
rcu_read_unlock();
|
||||
if (goal->metric == DAMOS_QUOTA_NODE_MEMCG_USED_BP)
|
||||
return 0;
|
||||
else /* DAMOS_QUOTA_NODE_MEMCG_FREE_BP */
|
||||
return 10000;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
mem_cgroup_flush_stats(memcg);
|
||||
lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(goal->nid));
|
||||
used_pages = lruvec_page_state(lruvec, NR_ACTIVE_ANON);
|
||||
|
|
@ -2065,6 +2067,8 @@ static unsigned long damos_get_node_memcg_used_bp(
|
|||
used_pages += lruvec_page_state(lruvec, NR_ACTIVE_FILE);
|
||||
used_pages += lruvec_page_state(lruvec, NR_INACTIVE_FILE);
|
||||
|
||||
mem_cgroup_put(memcg);
|
||||
|
||||
si_meminfo_node(&i, goal->nid);
|
||||
if (goal->metric == DAMOS_QUOTA_NODE_MEMCG_USED_BP)
|
||||
numerator = used_pages;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user