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

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

diff --git a/queue-6.12/sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch b/queue-6.12/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 f672cdd9b3fc737e1b3ef4fb084841dd21b2a2e8..d1bf1f85cab623b9dde65196b233b36f460e2aed 100644 (file)
@@ -152,3 +152,4 @@ i2c-omap-add-support-for-setting-mux.patch
 i2c-omap-fix-an-error-handling-path-in-omap_i2c_probe.patch
 i2c-omap-handle-omap_i2c_init-errors-in-omap_i2c_probe.patch
 i2c-omap-fix-deprecated-of_property_read_bool-use.patch
+sched-freezer-remove-unnecessary-warning-in-__thaw_task.patch