Patch "cgroup/pids: remove spurious suspicious RCU usage warning" has been added to the 4.9-stable tree
This is a note to let you know that I've just added the patch titled
cgroup/pids: remove spurious suspicious RCU usage warning
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cgroup-pids-remove-spurious-suspicious-rcu-usage-warning.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
1d18c2747f937f1b5ec65ce6bf4ccb9ca1aea9e8Mon Sep 17 00:00:00 2001
From: Tejun Heo <[email protected]>
Date: Wed, 1 Mar 2017 15:39:07 -0500
Subject: cgroup/pids: remove spurious suspicious RCU usage warning
From: Tejun Heo <[email protected]>
commit 1d18c2747f937f1b5ec65ce6bf4ccb9ca1aea9e8 upstream.
pids_can_fork() is special in that the css association is guaranteed to be stable throughout the function and thus doesn't need RCU protection around task_css access. When determining the css to charge the pid, task_css_check() is used to override the RCU sanity check.
While adding a warning message on fork rejection from pids limit, 135b8b37bd91 ("cgroup: Add pids controller event when fork fails because of pid limit") incorrectly added a task_css access which is neither RCU protected or explicitly annotated. This triggers the following suspicious RCU usage warning when RCU debugging is enabled.
cgroup: fork rejected by pids controller in
===============================
[ ERR: suspicious RCU usage. ]
4.10.0-work+ #1 Not tainted
-------------------------------
./include/linux/cgroup.h:435 suspicious rcu_dereference_check() usage!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 0
1 lock held by bash/1748:
#0: (&cgroup_threadgroup_rwsem){+++++.}, at: [<ffffffff81052c96>] _do_fork+0xe6/0x6e0
stack backtrace: CPU: 3 PID: 1748 Comm: bash Not tainted 4.10.0-work+ #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.3-1.fc25 04/01/2014 Call Trace: dump_stack+0x68/0x93 lockdep_rcu_suspicious+0xd7/0x110 pids_can_fork+0x1c7/0x1d0 cgroup_can_fork+0x67/0xc0 copy_process.part.58+0x1709/0x1e90 _do_fork+0xe6/0x6e0 SyS_clone+0x19/0x20 do_syscall_64+0x5c/0x140 entry_SYSCALL64_slow_path+0x25/0x25 RIP: 0033:0x7f7853fab93a RSP: 002b:00007ffc12d05c90 EFLAGS: 00000246 ORIG_RAX: 0000000000000038 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f7853fab93a RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000001200011 RBP: 00007ffc12d05cc0 R08: 0000000000000000 R09: 00007f78548db700 R10: 00007f78548db9d0 R11: 0000000000000246 R12: 00000000000006d4 R13: 0000000000000001 R14: 0000000000000000 R15: 000055e3ebe2c04d /asdf
There's no reason to dereference task_css again here when the associated css is already available. Fix it by replacing the task_cgroup() call with css->cgroup.
--- kernel/cgroup_pids.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/cgroup_pids.c +1 -1
@@ -229,7 +229,7 @@ static int pids_can_fork(struct task_str/* Only log the first time events_limit is incremented. */ if (atomic64_inc_return (&pids->events_limit) ==1 ) {pr_info ("cgroup: fork rejected by pids controller in " ); -pr_cont_cgroup_path (task_cgroup (current, pids_cgrp_id)); +pr_cont_cgroup_path (css->cgroup);pr_cont ("\n" ); }cgroup_file_notify (&pids->events_file);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/percpu-acquire-pcpu_lock-when-updating-pcpu_nr_empty_pop_pages.patch queue-4.9/cgroup-pids-remove-spurious-suspicious-rcu-usage-warning.patch