Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16d13b59 authored by Al Viro's avatar Al Viro
Browse files

configfs: sanitize configfs_create()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent b7c177fc
Loading
Loading
Loading
Loading
+27 −28
Original line number Original line Diff line number Diff line
@@ -188,35 +188,34 @@ int configfs_create(struct dentry * dentry, umode_t mode, int (*init)(struct ino
{
{
	int error = 0;
	int error = 0;
	struct inode *inode = NULL;
	struct inode *inode = NULL;
	if (dentry) {
	struct configfs_dirent *sd;
		if (!dentry->d_inode) {
	struct inode *p_inode;
			struct configfs_dirent *sd = dentry->d_fsdata;

			if ((inode = configfs_new_inode(mode, sd, dentry->d_sb))) {
	if (!dentry)
				if (dentry->d_parent && dentry->d_parent->d_inode) {
		return -ENOENT;
					struct inode *p_inode = dentry->d_parent->d_inode;

	if (dentry->d_inode)
		return -EEXIST;

	sd = dentry->d_fsdata;
	inode = configfs_new_inode(mode, sd, dentry->d_sb);
	if (!inode)
		return -ENOMEM;

	p_inode = dentry->d_parent->d_inode;
	p_inode->i_mtime = p_inode->i_ctime = CURRENT_TIME;
	p_inode->i_mtime = p_inode->i_ctime = CURRENT_TIME;
				}
	configfs_set_inode_lock_class(sd, inode);
	configfs_set_inode_lock_class(sd, inode);
				goto Proceed;
			}
			else
				error = -ENOMEM;
		} else
			error = -EEXIST;
	} else
		error = -ENOENT;
	goto Done;


 Proceed:
	if (init) {
	if (init)
		error = init(inode);
		error = init(inode);
	if (!error) {
		if (error) {
			iput(inode);
			return error;
		}
	}
	d_instantiate(dentry, inode);
	d_instantiate(dentry, inode);
	if (S_ISDIR(mode) || S_ISLNK(mode))
	if (S_ISDIR(mode) || S_ISLNK(mode))
		dget(dentry);  /* pin link and directory dentries in core */
		dget(dentry);  /* pin link and directory dentries in core */
	} else
		iput(inode);
 Done:
	return error;
	return error;
}
}