procfs: make errno values consistent when open pident vs exit(2) race occurs
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> Cc: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b2e1feaf0a
commit
bd6daba909
@ -1956,7 +1956,7 @@ static struct dentry *proc_pident_instantiate(struct inode *dir,
|
|||||||
const struct pid_entry *p = ptr;
|
const struct pid_entry *p = ptr;
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
struct proc_inode *ei;
|
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);
|
inode = proc_pid_make_inode(dir->i_sb, task);
|
||||||
if (!inode)
|
if (!inode)
|
||||||
|
Loading…
Reference in New Issue
Block a user