diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 31bf3bb8ddae055741761fc32786d9563e0250dd..7d225a2b8b2ac796de096b7dda8edfdd4b624525 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -462,6 +462,14 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) make_empty_dir_inode(inode); return inode; } + + if (!use_pde(de)) { + PROC_I(inode)->pde = NULL; + pde_put(de); + iput(inode); + return NULL; + } + if (de->mode) { inode->i_mode = de->mode; inode->i_uid = de->uid; @@ -486,6 +494,7 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) inode->i_fop = de->proc_fops; } } + unuse_pde(de); } else pde_put(de); return inode;