Files
linux/fs
Muchun Song fdf3ef3f66 writeback: fix obtain a reference to a freeing memcg css
[ Upstream commit 8b0ed8443a ]

The caller of wb_get_create() should pin the memcg, because
wb_get_create() relies on this guarantee. The rcu read lock
only can guarantee that the memcg css returned by css_from_id()
cannot be released, but the reference of the memcg can be zero.

  rcu_read_lock()
  memcg_css = css_from_id()
  wb_get_create(memcg_css)
      cgwb_create(memcg_css)
          // css_get can change the ref counter from 0 back to 1
          css_get(memcg_css)
  rcu_read_unlock()

Fix it by holding a reference to the css before calling
wb_get_create(). This is not a problem I encountered in the
real world. Just the result of a code review.

Fixes: 682aa8e1a6 ("writeback: implement unlocked_inode_to_wb transaction and use it for stat updates")
Link: https://lore.kernel.org/r/20210402091145.80635-1-songmuchun@bytedance.com
Signed-off-by: Muchun Song <songmuchun@bytedance.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-07-20 16:15:52 +02:00
..
2020-11-05 11:08:53 +01:00
2021-06-30 08:48:14 -04:00
2021-05-22 10:59:49 +02:00
2019-08-06 19:06:51 +02:00
2021-07-20 16:15:46 +02:00
2018-08-17 16:20:28 -07:00
2021-07-20 16:15:49 +02:00
2020-06-22 09:05:01 +02:00
2020-03-05 16:42:12 +01:00
2021-01-30 13:32:11 +01:00
2020-03-25 08:06:14 +01:00
2021-05-22 10:59:50 +02:00