From: Eric W. Biederman Date: Wed, 15 Jun 2011 19:47:04 +0000 (-0700) Subject: proc: Fix Oops on stat of /proc//ns/net X-Git-Tag: 2.1b_release~3655^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=793925334f32e9026c22baee5c3c340f47d4ef7e;p=platform%2Fkernel%2Fkernel-mfld-blackbay.git proc: Fix Oops on stat of /proc//ns/net Don't call iput with the inode half setup to be a namespace filedescriptor. Instead rearrange the code so that we don't initialize ei->ns_ops until after I ns_ops->get succeeds, preventing us from invoking ns_ops->put when ns_ops->get failed. Reported-by: Ingo Saitz Signed-off-by: Eric W. Biederman --- diff --git a/fs/proc/namespaces.c b/fs/proc/namespaces.c index 781dec5..be177f7 100644 --- a/fs/proc/namespaces.c +++ b/fs/proc/namespaces.c @@ -38,18 +38,21 @@ static struct dentry *proc_ns_instantiate(struct inode *dir, struct inode *inode; struct proc_inode *ei; struct dentry *error = ERR_PTR(-ENOENT); + void *ns; inode = proc_pid_make_inode(dir->i_sb, task); if (!inode) goto out; + ns = ns_ops->get(task); + if (!ns) + goto out_iput; + ei = PROC_I(inode); inode->i_mode = S_IFREG|S_IRUSR; inode->i_fop = &ns_file_operations; ei->ns_ops = ns_ops; - ei->ns = ns_ops->get(task); - if (!ei->ns) - goto out_iput; + ei->ns = ns; dentry->d_op = &pid_dentry_operations; d_add(dentry, inode);