proc: protect mm start_code/end_code in /proc/pid/stat
[firefly-linux-kernel-4.4.55.git] / fs / devpts / inode.c
index 1bb547c9cad6d98d5c2816a3bf01d46481a72224..2f27e578d4660e89c1215d7a9edc2dffa6439c89 100644 (file)
@@ -479,6 +479,7 @@ int devpts_pty_new(struct inode *ptmx_inode, struct tty_struct *tty)
        struct dentry *root = sb->s_root;
        struct pts_fs_info *fsi = DEVPTS_SB(sb);
        struct pts_mount_opts *opts = &fsi->mount_opts;
+       int ret = 0;
        char s[12];
 
        /* We're supposed to be given the slave end of a pty */
@@ -501,14 +502,17 @@ int devpts_pty_new(struct inode *ptmx_inode, struct tty_struct *tty)
        mutex_lock(&root->d_inode->i_mutex);
 
        dentry = d_alloc_name(root, s);
-       if (!IS_ERR(dentry)) {
+       if (dentry) {
                d_add(dentry, inode);
                fsnotify_create(root->d_inode, dentry);
+       } else {
+               iput(inode);
+               ret = -ENOMEM;
        }
 
        mutex_unlock(&root->d_inode->i_mutex);
 
-       return 0;
+       return ret;
 }
 
 struct tty_struct *devpts_get_tty(struct inode *pts_inode, int number)
@@ -544,17 +548,12 @@ void devpts_pty_kill(struct tty_struct *tty)
        mutex_lock(&root->d_inode->i_mutex);
 
        dentry = d_find_alias(inode);
-       if (IS_ERR(dentry))
-               goto out;
-
-       if (dentry) {
-               inode->i_nlink--;
-               d_delete(dentry);
-               dput(dentry);   /* d_alloc_name() in devpts_pty_new() */
-       }
 
+       inode->i_nlink--;
+       d_delete(dentry);
+       dput(dentry);   /* d_alloc_name() in devpts_pty_new() */
        dput(dentry);           /* d_find_alias above */
-out:
+
        mutex_unlock(&root->d_inode->i_mutex);
 }