From: Christian Brauner <[email protected]>

[ Upstream commit 3d9fd0abc94d8cd430cc7cd7d37ce5e5aae2cd2b ]

Replace the open-coded "epi is the only entry in file->f_ep" check
with hlist_is_singular_node(). Same semantics, and the helper avoids
the head-cacheline access in the common false case.

Link: 
https://patch.msgid.link/[email protected]
Signed-off-by: Christian Brauner (Amutable) <[email protected]>
Stable-dep-of: a6dc643c6931 ("eventpoll: fix ep_remove struct eventpoll / 
struct file UAF")
Signed-off-by: Quentin Schulz <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
(cherry picked from commit 89dbf792b525ad7fa00b2cec747a5479efa1d323)
Signed-off-by: Eva Kurchatova <[email protected]>

https://virtuozzo.atlassian.net/browse/VSTOR-137490
Feature: fix epoll cve
---
 fs/eventpoll.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index 6501b3e5bfc3..254f0a19d0f2 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -856,7 +856,7 @@ static bool __ep_remove(struct eventpoll *ep, struct epitem 
*epi, bool force)
 
        to_free = NULL;
        head = file->f_ep;
-       if (head->first == &epi->fllink && !epi->fllink.next) {
+       if (hlist_is_singular_node(&epi->fllink, head)) {
                /* See eventpoll_release() for details. */
                WRITE_ONCE(file->f_ep, NULL);
                if (!is_file_epoll(file)) {
-- 
2.55.0

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to