[RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Gautham R Shenoy
Date: Thursday, April 19, 2007 - 5:02 am

This patch fixes the race pointed out by Oleg Nesterov.

* Freezer marks a thread as freezeable. 
* The thread now marks itself PF_NOFREEZE causing it to
  freeze on calling try_to_freeze(). Thus the task is frozen, even though
  it doesn't want to.
* Subsequent thaw_processes() will also fail to thaw the task since it is 
  marked PF_NOFREEZE.

Avoid this problem by checking the current task's PF_NOFREEZE status in the 
refrigerator before marking current as frozen.

Signed-off-by: Gautham R Shenoy <ego@in.ibm.com>
---
 kernel/power/process.c |    9 +++++++++
 1 file changed, 9 insertions(+)

Index: linux-2.6.21-rc6/kernel/power/process.c
===================================================================
--- linux-2.6.21-rc6.orig/kernel/power/process.c
+++ linux-2.6.21-rc6/kernel/power/process.c
@@ -41,6 +41,15 @@ void refrigerator(void)
 
 	task_lock(current);
 	if (freezing(current)) {
+		/* check if we had marked ourself PF_NOFREEZE
+		 * *after* the freezer did the freezeable() check
+		 * on us.
+		 */
+		if (current->flags & PF_NOFREEZE) {
+			clear_tsk_thread_flag(current, TIF_FREEZE);
+			task_unlock(current);
+			return;
+		}
 		frozen_process(current);
 		task_unlock(current);
 	} else {
-- 
Gautham R Shenoy
Linux Technology Center
IBM India.
"Freedom comes with a price tag of responsibility, which is still a bargain,
because Freedom is priceless!"
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC 0/2] Fix Freezer related races., Gautham R Shenoy, (Thu Apr 19, 5:01 am)
[RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race, Gautham R Shenoy, (Thu Apr 19, 5:02 am)
[RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop race, Gautham R Shenoy, (Thu Apr 19, 5:04 am)
Re: [RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race, Rafael J. Wysocki, (Thu Apr 19, 2:39 pm)
Re: [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop ..., Rafael J. Wysocki, (Fri Apr 20, 1:54 am)
Re: [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop ..., Rafael J. Wysocki, (Fri Apr 20, 4:59 am)
Re: [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop ..., Rafael J. Wysocki, (Fri Apr 20, 5:50 am)
Re: [RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race, Oleg Nesterov, (Fri Apr 20, 11:02 am)
Re: [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop ..., Rafael J. Wysocki, (Fri Apr 20, 2:13 pm)
Re: [RFC PATCH(experimental) 2/2] Fix freezer-kthread_stop ..., Rafael J. Wysocki, (Fri Apr 20, 2:45 pm)
[RFC][PATCH -mm 0/3] Separate freezer flags, Rafael J. Wysocki, (Sun Apr 22, 12:28 pm)
[RFC][PATCH -mm 1/3] Separate freezer from PM code, Rafael J. Wysocki, (Sun Apr 22, 12:33 pm)
[RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Sun Apr 22, 12:39 pm)
[RFC][PATCH -mm 3/3] freezer: Fix problem with kthread_stop, Rafael J. Wysocki, (Sun Apr 22, 12:40 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Sun Apr 22, 3:14 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Satyam Sharma, (Sun Apr 22, 8:18 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Satyam Sharma, (Sun Apr 22, 9:09 pm)
Re: [RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race, Gautham R Shenoy, (Mon Apr 23, 3:26 am)
Re: [RFC][PATCH -mm 1/3] Separate freezer from PM code, Pavel Machek, (Mon Apr 23, 3:41 am)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Gautham R Shenoy, (Mon Apr 23, 6:17 am)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Gautham R Shenoy, (Mon Apr 23, 7:19 am)
Re: [RFC PATCH 1/2] Fix PF_NOFREEZE and freezeable race, Oleg Nesterov, (Mon Apr 23, 10:49 am)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Mon Apr 23, 11:49 am)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Mon Apr 23, 12:06 pm)
Re: [RFC][PATCH -mm 3/3] freezer: Fix problem with kthread ..., Rafael J. Wysocki, (Mon Apr 23, 12:50 pm)
Re: [RFC][PATCH -mm 3/3] freezer: Fix problem with kthread ..., Rafael J. Wysocki, (Mon Apr 23, 12:55 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Mon Apr 23, 12:57 pm)
Re: [RFC][PATCH -mm 3/3] freezer: Fix problem with kthread ..., Rafael J. Wysocki, (Mon Apr 23, 1:05 pm)
Re: [RFC][PATCH -mm 3/3] freezer: Fix problem with kthread ..., Rafael J. Wysocki, (Mon Apr 23, 2:30 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Oleg Nesterov, (Mon Apr 23, 3:23 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Mon Apr 23, 3:40 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Gautham R Shenoy, (Mon Apr 23, 3:41 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Mon Apr 23, 3:55 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Oleg Nesterov, (Mon Apr 23, 3:55 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Mon Apr 23, 4:10 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Oleg Nesterov, (Mon Apr 23, 4:19 pm)
Re: [RFC][PATCH -mm 2/3] freezer: Introduce freezer_flags, Rafael J. Wysocki, (Tue Apr 24, 4:32 am)