Messages in this thread | | | Date | Thu, 10 Dec 2009 22:17:31 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: [patch 1/9] sys: Fix missing rcu protection for __task_cred()access |
| |
On Fri, 11 Dec 2009, Tetsuo Handa wrote: > > 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. > > So, we need to change below comment from "or" to "and" ?
No, both functions must be called with rcu_read_lock()
tasklist_lock read-held is not protecting the rcu lists and does not protect against a concurrent update. It merily protects against tasks going away or being added while we look up the lists.
> 378 /* > 379 * Must be called under rcu_read_lock() or with tasklist_lock read-held. > 380 */ > 381 struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns) > 382 { > 383 return pid_task(find_pid_ns(nr, ns), PIDTYPE_PID); > 384 } > 385 > 386 struct task_struct *find_task_by_vpid(pid_t vnr) > 387 { > 388 return find_task_by_pid_ns(vnr, current->nsproxy->pid_ns); > 389 } >
Thanks,
tglx
| |