mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
selinux: Use simple_start_creating() / simple_done_creating()
Instead of explicitly locking the parent and performing a lookup in selinux, use simple_start_creating(), and then use simple_done_creating() to unlock. This extends the region that the directory is locked for, and also performs a lookup. The lock extension is of no real consequence. The lookup uses simple_lookup() and so always succeeds. Thus when d_make_persistent() is called the dentry will already be hashed. d_make_persistent() handles this case. Reviewed-by: Jeff Layton <jlayton@kernel.org> Acked-by: Paul Moore <paul@paul-moore.com> Signed-off-by: NeilBrown <neil@brown.name> Link: https://patch.msgid.link/20260224222542.3458677-7-neilb@ownmail.net Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
committed by
Christian Brauner
parent
5c6c7ae932
commit
c4573e18e2
@@ -1931,27 +1931,26 @@ static const struct inode_operations swapover_dir_inode_operations = {
|
||||
static struct dentry *sel_make_swapover_dir(struct super_block *sb,
|
||||
unsigned long *ino)
|
||||
{
|
||||
struct dentry *dentry = d_alloc_name(sb->s_root, ".swapover");
|
||||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
|
||||
if (!dentry)
|
||||
inode = sel_make_inode(sb, S_IFDIR);
|
||||
if (!inode)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
inode = sel_make_inode(sb, S_IFDIR);
|
||||
if (!inode) {
|
||||
dput(dentry);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
dentry = simple_start_creating(sb->s_root, ".swapover");
|
||||
if (IS_ERR(dentry)) {
|
||||
iput(inode);
|
||||
return dentry;
|
||||
}
|
||||
|
||||
inode->i_op = &swapover_dir_inode_operations;
|
||||
inode->i_ino = ++(*ino);
|
||||
/* directory inodes start off with i_nlink == 2 (for "." entry) */
|
||||
inc_nlink(inode);
|
||||
inode_lock(sb->s_root->d_inode);
|
||||
d_make_persistent(dentry, inode);
|
||||
inc_nlink(sb->s_root->d_inode);
|
||||
inode_unlock(sb->s_root->d_inode);
|
||||
dput(dentry);
|
||||
simple_done_creating(dentry);
|
||||
return dentry; // borrowed
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user