]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.15-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Jul 2025 12:39:02 +0000 (14:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Jul 2025 12:39:02 +0000 (14:39 +0200)
added patches:
sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch

queue-6.15/sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch [new file with mode: 0644]
queue-6.15/series

diff --git a/queue-6.15/sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch b/queue-6.15/sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch
new file mode 100644 (file)
index 0000000..ccbfe0c
--- /dev/null
@@ -0,0 +1,74 @@
+From 9beb8c5e77dc10e3889ff5f967eeffba78617a88 Mon Sep 17 00:00:00 2001
+From: Chen Ridong <chenridong@huawei.com>
+Date: Thu, 17 Jul 2025 08:55:49 +0000
+Subject: sched,freezer: Remove unnecessary warning in __thaw_task
+
+From: Chen Ridong <chenridong@huawei.com>
+
+commit 9beb8c5e77dc10e3889ff5f967eeffba78617a88 upstream.
+
+Commit cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check if not
+frozen") modified the cgroup_freezing() logic to verify that the FROZEN
+flag is not set, affecting the return value of the freezing() function,
+in order to address a warning in __thaw_task.
+
+A race condition exists that may allow tasks to escape being frozen. The
+following scenario demonstrates this issue:
+
+CPU 0 (get_signal path)                CPU 1 (freezer.state reader)
+try_to_freeze                  read freezer.state
+__refrigerator                 freezer_read
+                               update_if_frozen
+WRITE_ONCE(current->__state, TASK_FROZEN);
+                               ...
+                               /* Task is now marked frozen */
+                               /* frozen(task) == true */
+                               /* Assuming other tasks are frozen */
+                               freezer->state |= CGROUP_FROZEN;
+/* freezing(current) returns false */
+/* because cgroup is frozen (not freezing) */
+break out
+__set_current_state(TASK_RUNNING);
+/* Bug: Task resumes running when it should remain frozen */
+
+The existing !frozen(p) check in __thaw_task makes the
+WARN_ON_ONCE(freezing(p)) warning redundant. Removing this warning enables
+reverting commit cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check if
+not frozen") to resolve the issue.
+
+This patch removes the warning from __thaw_task. A subsequent patch will
+revert commit cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check if
+not frozen") to complete the fix.
+
+Reported-by: Zhong Jiawei<zhongjiawei1@huawei.com>
+Signed-off-by: Chen Ridong <chenridong@huawei.com>
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ kernel/freezer.c |   15 +++------------
+ 1 file changed, 3 insertions(+), 12 deletions(-)
+
+--- a/kernel/freezer.c
++++ b/kernel/freezer.c
+@@ -201,18 +201,9 @@ static int __restore_freezer_state(struc
+ void __thaw_task(struct task_struct *p)
+ {
+-      unsigned long flags;
+-
+-      spin_lock_irqsave(&freezer_lock, flags);
+-      if (WARN_ON_ONCE(freezing(p)))
+-              goto unlock;
+-
+-      if (!frozen(p) || task_call_func(p, __restore_freezer_state, NULL))
+-              goto unlock;
+-
+-      wake_up_state(p, TASK_FROZEN);
+-unlock:
+-      spin_unlock_irqrestore(&freezer_lock, flags);
++      guard(spinlock_irqsave)(&freezer_lock);
++      if (frozen(p) && !task_call_func(p, __restore_freezer_state, NULL))
++              wake_up_state(p, TASK_FROZEN);
+ }
+ /**
index 926180513083c0aedcf5987119c8d1ebfe9664af..6dba2d36b59a0517417a946618d21dff493549e8 100644 (file)
@@ -180,3 +180,4 @@ smb-smbdirect-introduce-smbdirect_socket_parameters.patch
 smb-client-make-use-of-common-smbdirect_socket_parameters.patch
 cifs-fix-the-smbd_response-slab-to-allow-usercopy.patch
 cifs-fix-reading-into-an-iter_folioq-from-the-smbdirect-code.patch
+sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch