Messages in this thread | | | Date | Fri, 11 Dec 2009 14:52:10 +0100 (CET) | From | Thomas Gleixner <> | Subject | Re: [patch 1/9] sys: Fix missing rcu protection for __task_cred() access |
| |
On Fri, 11 Dec 2009, David Howells wrote:
> Thomas Gleixner <tglx@linutronix.de> wrote: > > > > > Or are there updates that are carried out without write-holding > > > > tasklist_lock that I am missing? > > > > > > Yes, commit_creds() is called lockless. > > > > Right, and that's what the problem is. commit_creds(), which rcu frees > > the old creds, does not take tasklist lock write lock. > > commit_creds() does not need to hold a write lock, because it is implicitly > write-locked by only being permitted to run in the thread to which it is > committing. > > I don't think commit_creds() needs to take the RCU read lock as no-one else > can alter/delete the creds it is dealing with.
commit_cred() is not required to take anything, but the reader side needs to take rcu_read_lock() when accessing __task_cred() of another task as that task could update its own creds right at that point.
The point is that read_lock(tasklist_lock) is not sufficient for the reader side.
Thanks,
tglx
| |