Commit b208d54b authored by Debabrata Banerjee's avatar Debabrata Banerjee Committed by Linus Torvalds
Browse files

procfs: fix error handling of proc_register()



proc_register() error paths are leaking inodes and directory refcounts.

Signed-off-by: default avatarDebabrata Banerjee <dbanerje@akamai.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Acked-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 710585d4
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -369,15 +369,22 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp
		dp->proc_iops = &proc_file_inode_operations;
	} else {
		WARN_ON(1);
		proc_free_inum(dp->low_ino);
		return -EINVAL;
	}

	spin_lock(&proc_subdir_lock);
	dp->parent = dir;
	if (pde_subdir_insert(dir, dp) == false)
	if (pde_subdir_insert(dir, dp) == false) {
		WARN(1, "proc_dir_entry '%s/%s' already registered\n",
		     dir->name, dp->name);
		spin_unlock(&proc_subdir_lock);
		if (S_ISDIR(dp->mode))
			dir->nlink--;
		proc_free_inum(dp->low_ino);
		return -EEXIST;
	}
	spin_unlock(&proc_subdir_lock);

	return 0;
}