From: Jinliang Zheng alexjlzheng@tencent.com
Consider the following module code:
static struct dentry *dentry;
static int __init securityfs_test_init(void) { dentry = securityfs_create_dir("standon", NULL); return PTR_ERR(dentry); }
static void __exit securityfs_test_exit(void) { securityfs_remove(dentry); }
module_init(securityfs_test_init); module_exit(securityfs_test_exit);
and then:
insmod /path/to/thismodule cd /sys/kernel/security/standon <- we hold 'standon' rmmod thismodule <- 'standon' don't go away insmod /path/to/thismodule <- Failed: File exists!
Fix this by adding d_delete() in securityfs_remove().
Fixes: b67dbf9d4c198 ("[PATCH] add securityfs for all LSMs to use") Signed-off-by: Jinliang Zheng alexjlzheng@tencent.com Cc: stable@vger.kernel.org --- security/inode.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/security/inode.c b/security/inode.c index da3ab44c8e57..d99baf26350a 100644 --- a/security/inode.c +++ b/security/inode.c @@ -306,6 +306,7 @@ void securityfs_remove(struct dentry *dentry) simple_rmdir(dir, dentry); else simple_unlink(dir, dentry); + d_delete(dentry); dput(dentry); } inode_unlock(dir);