fix regression in "epoll: Keep a reference on files added to the check list"
[ Upstream commit 77f4689de17c0887775bb77896f4cc11a39bf848 ]
epoll_loop_check_proc() can run into a file already committed to destruction;
we can't grab a reference on those and don't need to add them to the set for
reverse path check anyway.
Tested-by: Marc Zyngier <maz@kernel.org>
Fixes: a9ed4a6560b8 ("epoll: Keep a reference on files added to the check list")
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Issue: FP3SEC-128
(cherry picked from commit 8238ee93a30a5ff6fc75751e122a28e0d92f3e12)
Change-Id: I48d8321f802dc1634a8a9fc9d79a6a975e7de969
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index 5b839ce..4bcbab6 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -1750,9 +1750,9 @@
* during ep_insert().
*/
if (list_empty(&epi->ffd.file->f_tfile_llink)) {
- get_file(epi->ffd.file);
- list_add(&epi->ffd.file->f_tfile_llink,
- &tfile_check_list);
+ if (get_file_rcu(epi->ffd.file))
+ list_add(&epi->ffd.file->f_tfile_llink,
+ &tfile_check_list);
}
}
}