summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0312-aio-Fix-incorrect-usage-of-eventfd_signal_allowed.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0312-aio-Fix-incorrect-usage-of-eventfd_signal_allowed.patch')
-rw-r--r--debian/patches-rt/0312-aio-Fix-incorrect-usage-of-eventfd_signal_allowed.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/debian/patches-rt/0312-aio-Fix-incorrect-usage-of-eventfd_signal_allowed.patch b/debian/patches-rt/0312-aio-Fix-incorrect-usage-of-eventfd_signal_allowed.patch
new file mode 100644
index 000000000..978a2de7d
--- /dev/null
+++ b/debian/patches-rt/0312-aio-Fix-incorrect-usage-of-eventfd_signal_allowed.patch
@@ -0,0 +1,38 @@
+From fd840c98e310adf2a03ee242969a9597a909a672 Mon Sep 17 00:00:00 2001
+From: Xie Yongji <xieyongji@bytedance.com>
+Date: Mon, 13 Sep 2021 19:19:28 +0800
+Subject: [PATCH 312/323] aio: Fix incorrect usage of eventfd_signal_allowed()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.204-rt100.tar.xz
+
+commit 4b3749865374899e115aa8c48681709b086fe6d3 upstream.
+
+We should defer eventfd_signal() to the workqueue when
+eventfd_signal_allowed() return false rather than return
+true.
+
+Fixes: b542e383d8c0 ("eventfd: Make signal recursion protection a task bit")
+Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
+Link: https://lore.kernel.org/r/20210913111928.98-1-xieyongji@bytedance.com
+Reviewed-by: Eric Biggers <ebiggers@google.com>
+Signed-off-by: Eric Biggers <ebiggers@google.com>
+Signed-off-by: Luis Claudio R. Goncalves <lgoncalv@redhat.com>
+---
+ fs/aio.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fs/aio.c b/fs/aio.c
+index e1181dc37be1..e88fd9b58f3f 100644
+--- a/fs/aio.c
++++ b/fs/aio.c
+@@ -1765,7 +1765,7 @@ static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,
+ list_del_init(&req->wait.entry);
+ list_del(&iocb->ki_list);
+ iocb->ki_res.res = mangle_poll(mask);
+- if (iocb->ki_eventfd && eventfd_signal_allowed()) {
++ if (iocb->ki_eventfd && !eventfd_signal_allowed()) {
+ iocb = NULL;
+ INIT_WORK(&req->work, aio_poll_put_work);
+ schedule_work(&req->work);
+--
+2.43.0
+