Messages in this thread | | | Subject | Re: [PATCH] make consistent errno value when open pident vs exit(2) race | From | (Eric W. Biederman) | Date | Wed, 08 Apr 2009 20:35:31 -0700 |
| |
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> writes:
> proc_pident_instantiate() has following call flow. > > proc_pident_lookup() > proc_pident_instantiate() > proc_pid_make_inode() > > And, proc_pident_lookup() has following error handling. > > const struct pid_entry *p, *last; > error = ERR_PTR(-ENOENT); > if (!task) > goto out_no_task; > > Then, proc_pident_instantiate should return ENOENT too when racing against > exit(2) occur. > > EINAL has two bad reason. > - it implies caller is wrong. bad the race isn't caller's mistake. > - man 2 open don't explain EINVAL. user often don't handle it. > > > Note: Other proc_pid_make_inode() caller already use ENOENT properly.
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Looks reasonable to me.
> Cc: Eric W. Biederman <ebiederm@xmission.com> > Cc: Andrew Morton <akpm@osdl.org> > Cc: Alexey Dobriyan <adobriyan@gmail.com> > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> > -- > fs/proc/base.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/fs/proc/base.c b/fs/proc/base.c > index f715597..803d09e 100644 > --- a/fs/proc/base.c > +++ b/fs/proc/base.c > @@ -1953,7 +1953,7 @@ static struct dentry *proc_pident_instantiate(struct inode *dir, > const struct pid_entry *p = ptr; > struct inode *inode; > struct proc_inode *ei; > - struct dentry *error = ERR_PTR(-EINVAL); > + struct dentry *error = ERR_PTR(-ENOENT); > > inode = proc_pid_make_inode(dir->i_sb, task); > if (!inode)
| |