diff options
author | Sergey Senozhatsky <sergey.senozhatsky@gmail.com> | 2010-11-03 18:52:56 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2010-11-10 13:07:06 +0100 |
commit | c0deae8c9587419ab13874b74425ce2eb2e18508 (patch) | |
tree | 54887135a674951d19e169b5ff17a866b16d7cbe /lib/atomic64.c | |
parent | 814ce2521121c2459e16cea8c7221e157edbeddd (diff) | |
download | op-kernel-dev-c0deae8c9587419ab13874b74425ce2eb2e18508.zip op-kernel-dev-c0deae8c9587419ab13874b74425ce2eb2e18508.tar.gz |
posix-cpu-timers: Rcu_read_lock/unlock protect find_task_by_vpid call
Commit 4221a9918e38b7494cee341dda7b7b4bb8c04bde "Add RCU check for
find_task_by_vpid()" introduced rcu_lockdep_assert to find_task_by_pid_ns.
Add rcu_read_lock/rcu_read_unlock to call find_task_by_vpid.
Tetsuo Handa wrote:
| Quoting from one of posts in that thead
| http://kerneltrap.org/mailarchive/linux-kernel/2010/2/8/4536388
|
|| Usually tasklist gives enough protection, but if copy_process() fails
|| it calls free_pid() lockless and does call_rcu(delayed_put_pid().
|| This means, without rcu lock find_pid_ns() can't scan the hash table
|| safely.
Thomas Gleixner wrote:
| We can remove the tasklist_lock while at it. rcu_read_lock is enough.
Patch also replaces thread_group_leader with has_group_leader_pid
in accordance to comment by Oleg Nesterov:
| ... thread_group_leader() check is not relaible without
| tasklist. If we race with de_thread() find_task_by_vpid() can find
| the new leader before it updates its ->group_leader.
|
| perhaps it makes sense to change posix_cpu_timer_create() to use
| has_group_leader_pid() instead, just to make this code not look racy
| and avoid adding new problems.
Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
LKML-Reference: <20101103165256.GD30053@swordfish.minsk.epam.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'lib/atomic64.c')
0 files changed, 0 insertions, 0 deletions