Skip to content

Commit

Permalink
oprofilefs: add missing ->i_mutex locking in object creation
Browse files Browse the repository at this point in the history
Right now it's safe only during initial mount *and* functions are asking
to be abused for dynamic adding of objects.

Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Al Viro committed Feb 23, 2013
1 parent 2248b87 commit 3f3834c
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions drivers/oprofile/oprofilefs.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,17 +139,22 @@ static int __oprofilefs_create_file(struct super_block *sb,
struct dentry *dentry;
struct inode *inode;

mutex_lock(&root->d_inode->i_mutex);
dentry = d_alloc_name(root, name);
if (!dentry)
if (!dentry) {
mutex_unlock(&root->d_inode->i_mutex);
return -ENOMEM;
}
inode = oprofilefs_get_inode(sb, S_IFREG | perm);
if (!inode) {
dput(dentry);
mutex_unlock(&root->d_inode->i_mutex);
return -ENOMEM;
}
inode->i_fop = fops;
inode->i_private = priv;
d_add(dentry, inode);
dentry->d_inode->i_private = priv;
mutex_unlock(&root->d_inode->i_mutex);
return 0;
}

Expand Down Expand Up @@ -212,17 +217,22 @@ struct dentry *oprofilefs_mkdir(struct super_block *sb,
struct dentry *dentry;
struct inode *inode;

mutex_lock(&root->d_inode->i_mutex);
dentry = d_alloc_name(root, name);
if (!dentry)
if (!dentry) {
mutex_unlock(&root->d_inode->i_mutex);
return NULL;
}
inode = oprofilefs_get_inode(sb, S_IFDIR | 0755);
if (!inode) {
dput(dentry);
mutex_unlock(&root->d_inode->i_mutex);
return NULL;
}
inode->i_op = &simple_dir_inode_operations;
inode->i_fop = &simple_dir_operations;
d_add(dentry, inode);
mutex_unlock(&root->d_inode->i_mutex);
return dentry;
}

Expand Down

0 comments on commit 3f3834c

Please sign in to comment.