[PATCH] fix dentry ref counting

From: James Bottomley
Date: Thu Dec 09 2021 - 14:33:49 EST


---
security/inode.c | 12 ++----------
security/integrity/ima/ima_fs.c | 4 ----
2 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/security/inode.c b/security/inode.c
index eaccba7017d9..b53152f7a625 100644
--- a/security/inode.c
+++ b/security/inode.c
@@ -178,8 +178,6 @@ static struct dentry *securityfs_create_dentry(const char *name, umode_t mode,
inode->i_fop = fops;
}
d_instantiate(dentry, inode);
- if (ns == &init_user_ns)
- dget(dentry);
inode_unlock(dir);
return dentry;

@@ -317,21 +315,15 @@ EXPORT_SYMBOL_GPL(securityfs_create_symlink);
void securityfs_remove(struct dentry *dentry)
{
struct user_namespace *ns = dentry->d_sb->s_user_ns;
- struct inode *dir;

if (!dentry || IS_ERR(dentry))
return;

- dir = d_inode(dentry->d_parent);
- inode_lock(dir);
if (simple_positive(dentry)) {
- if (d_is_dir(dentry))
- simple_rmdir(dir, dentry);
- else
- simple_unlink(dir, dentry);
+ d_delete(dentry);
dput(dentry);
}
- inode_unlock(dir);
+
if (ns == &init_user_ns)
simple_release_fs(&init_securityfs_mount,
&init_securityfs_mount_count);
diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c
index 778983fd9a73..077a6ff46858 100644
--- a/security/integrity/ima/ima_fs.c
+++ b/security/integrity/ima/ima_fs.c
@@ -466,10 +466,6 @@ int ima_securityfs_init(struct user_namespace *user_ns, struct dentry *root)
struct ima_namespace *ns = user_ns->ima_ns;
struct dentry *ima_dir;

- /* already initialized? */
- if (ns->dentry[IMAFS_DENTRY_INTEGRITY_DIR])
- return 0;
-
/* FIXME: update when evm and integrity are namespaced */
if (user_ns != &init_user_ns) {
ns->dentry[IMAFS_DENTRY_INTEGRITY_DIR] =
--
2.33.0