[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20200305140744.GY16139@dhcp22.suse.cz>
Date: Thu, 5 Mar 2020 15:07:44 +0100
From: Michal Hocko <mhocko@...nel.org>
To: brookxu <brookxu.cn@...il.com>
Cc: hannes@...xchg.org, vdavydov.dev@...il.com,
akpm@...ux-foundation.org, cgroups@...r.kernel.org,
linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] memcg: fix NULL pointer dereference in
__mem_cgroup_usage_unregister_event
On Thu 05-03-20 21:28:20, brookxu wrote:
[...]
> We can reproduce this problem in the following ways:
>
> 1. We create a new cgroup subdirectory and a new eventfd, and then we monitor multiple memory thresholds of the cgroup through this eventfd
> 2. closing this eventfd, the system will call __mem_cgroup_usage_unregister_event () multiple times to delete all events related to this eventfd.
>
> The first time __mem_cgroup_usage_unregister_event () is called, the system will clear all items related to this eventfd in thresholds-> primary.
> Since there is currently only one eventfd, thresholds-> primary becomes empty, so the system will set thresholds-> primary and hresholds-> spare
> to NULL. If at this time, the user creates a new eventfd and monitor the memory threshold of this cgroup, then the system will re-initialize
> thresholds-> primary. Then when the system call __mem_cgroup_usage_unregister_event () is called for the second time, because thresholds-> primary
> is not empty, the system will access thresholds-> spare, but thresholds-> spare is NULL, which will trigger a crash.
>
> In general, the longer it takes to delete all events related to this eventfd, the easier it is to trigger this problem.
Thank you for reproducing this on the current kernel and the above
description. That makes it much more easier to understand the underlying
problem. Please add it to the changelog. My memory about thresholds is
quite rusty so I will have to think about this more but I have some
coarse idea now at least.
--
Michal Hocko
SUSE Labs
Powered by blists - more mailing lists