cachefiles: add missing lock protection when polling
authorJingbo Xu <jefflexu@linux.alibaba.com>
Fri, 28 Jun 2024 06:29:30 +0000 (14:29 +0800)
committerChristian Brauner <brauner@kernel.org>
Wed, 3 Jul 2024 08:36:16 +0000 (10:36 +0200)
commitcf5bb09e742a9cf6349127e868329a8f69b7a014
tree19a7128ae5574051676e088562c7f446c347cfcb
parent19f4f399091478c95947f6bd7ad61622300c30d9
cachefiles: add missing lock protection when polling

Add missing lock protection in poll routine when iterating xarray,
otherwise:

Even with RCU read lock held, only the slot of the radix tree is
ensured to be pinned there, while the data structure (e.g. struct
cachefiles_req) stored in the slot has no such guarantee.  The poll
routine will iterate the radix tree and dereference cachefiles_req
accordingly.  Thus RCU read lock is not adequate in this case and
spinlock is needed here.

Fixes: b817e22b2e91 ("cachefiles: narrow the scope of triggering EPOLLIN events in ondemand mode")
Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Signed-off-by: Baokun Li <libaokun1@huawei.com>
Link: https://lore.kernel.org/r/20240628062930.2467993-10-libaokun@huaweicloud.com
Acked-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/cachefiles/daemon.c