]> err.no Git - linux-2.6/commit
[PATCH] proc: Close the race of a process dying durning lookup
authorEric W. Biederman <ebiederm@xmission.com>
Mon, 26 Jun 2006 07:25:49 +0000 (00:25 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 26 Jun 2006 16:58:25 +0000 (09:58 -0700)
commitcd6a3ce9ec040c0b56ea92a81ff710417798c559
tree350c0b4bb63a971c9409be8459a45b690ef4ac67
parent48e6484d49020dba3578ad117b461e8a391e8f0f
[PATCH] proc: Close the race of a process dying durning lookup

proc_lookup and task exiting are not synchronized, although some of the
previous code may have suggested that.  Every time before we reuse a dentry
namei.c calls d_op->derevalidate which prevents us from reusing a stale dcache
entry.  Unfortunately it does not prevent us from returning a stale dcache
entry.  This race has been explicitly plugged in proc_pid_lookup but there is
nothing to confine it to just that proc lookup function.

So to prevent the race I call revalidate explictily in all of the proc lookup
functions after I call d_add, and report an error if the revalidate does not
succeed.

Years ago Al Viro did something similar but those changes got lost in the
churn.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/proc/base.c