Status of the review of the backport

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I had sent out a request for the backport on 2014-03-17 16:17:32 GMT
titled "sched/autogroup: Fix race with task_groups list". I did not
however hear back about the status of the review of this backport.
Can you please let me know about the same? The below patch is known
to have fixed several boot time kernel oops on some of our local
machines and would be good to have it in the 3.10 stable kernel.

Thanks

Regards
Preeti U Murthy


From: Gerald Schaefer <gerald.schaefer <at> de.ibm.com>

commit 41261b6a832ea0e788627f6a8707854423f9ff49 upstream

In autogroup_create(), a tg is allocated and added to the task_groups
list. If CONFIG_RT_GROUP_SCHED is set, this tg is then modified while on
the list, without locking. This can race with someone walking the list,
like __enable_runtime() during CPU unplug, and result in a use-after-free
bug.

To fix this, move sched_online_group(), which adds the tg to the list,
to the end of the autogroup_create() function after the modification.

Please backport this fix to stable/3.10.y. There were many reports
of kernel oops on 3.10 due to the absence of this fix.

Signed-off-by: Gerald Schaefer <gerald.schaefer <at> de.ibm.com>
Signed-off-by: Peter Zijlstra <peterz <at> infradead.org>
Link: http://lkml.kernel.org/r/1369411669-46971-2-git-send-email-gerald.schaefer <at> de.ibm.com
Signed-off-by: Ingo Molnar <mingo <at> kernel.org>
Signed-off-by: Preeti U Murthy <preeti <at> linux.vnet.ibm.com>
---

 kernel/sched/auto_group.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c
index 64de5f8..4a07353 100644
--- a/kernel/sched/auto_group.c
+++ b/kernel/sched/auto_group.c
 <at>  <at>  -77,8 +77,6  <at>  <at>  static inline struct autogroup *autogroup_create(void)
 	if (IS_ERR(tg))
 		goto out_free;

-	sched_online_group(tg, &root_task_group);
-
 	kref_init(&ag->kref);
 	init_rwsem(&ag->lock);
 	ag->id = atomic_inc_return(&autogroup_seq_nr);
 <at>  <at>  -98,6 +96,7  <at>  <at>  static inline struct autogroup *autogroup_create(void)
 #endif
 	tg->autogroup = ag;

+	sched_online_group(tg, &root_task_group);
 	return ag;

 out_free:

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]