ima_fs: don't bother with removal of files in directory we'll be removing

removal of parent takes all children out

Acked-by: Mimi Zohar <zohar@linux.ibm.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro
2024-05-13 23:41:51 -06:00
parent a98ce0275b
commit 22260a99d7

View File

@@ -396,11 +396,6 @@ out:
static struct dentry *ima_dir;
static struct dentry *ima_symlink;
static struct dentry *binary_runtime_measurements;
static struct dentry *ascii_runtime_measurements;
static struct dentry *runtime_measurements_count;
static struct dentry *violations;
static struct dentry *ima_policy;
enum ima_fs_flags {
IMA_FS_BUSY,
@@ -419,14 +414,7 @@ static const struct seq_operations ima_policy_seqops = {
static void __init remove_securityfs_measurement_lists(struct dentry **lists)
{
int i;
if (lists) {
for (i = 0; i < securityfs_measurement_list_count; i++)
securityfs_remove(lists[i]);
kfree(lists);
}
kfree(lists);
}
static int __init create_securityfs_measurement_lists(void)
@@ -533,8 +521,7 @@ static int ima_release_policy(struct inode *inode, struct file *file)
ima_update_policy();
#if !defined(CONFIG_IMA_WRITE_POLICY) && !defined(CONFIG_IMA_READ_POLICY)
securityfs_remove(ima_policy);
ima_policy = NULL;
securityfs_remove(file->f_path.dentry);
#elif defined(CONFIG_IMA_WRITE_POLICY)
clear_bit(IMA_FS_BUSY, &ima_fs_flags);
#elif defined(CONFIG_IMA_READ_POLICY)
@@ -553,6 +540,7 @@ static const struct file_operations ima_measure_policy_ops = {
int __init ima_fs_init(void)
{
struct dentry *dentry;
int ret;
ascii_securityfs_measurement_lists = NULL;
@@ -573,54 +561,45 @@ int __init ima_fs_init(void)
if (ret != 0)
goto out;
binary_runtime_measurements =
securityfs_create_symlink("binary_runtime_measurements", ima_dir,
dentry = securityfs_create_symlink("binary_runtime_measurements", ima_dir,
"binary_runtime_measurements_sha1", NULL);
if (IS_ERR(binary_runtime_measurements)) {
ret = PTR_ERR(binary_runtime_measurements);
if (IS_ERR(dentry)) {
ret = PTR_ERR(dentry);
goto out;
}
ascii_runtime_measurements =
securityfs_create_symlink("ascii_runtime_measurements", ima_dir,
dentry = securityfs_create_symlink("ascii_runtime_measurements", ima_dir,
"ascii_runtime_measurements_sha1", NULL);
if (IS_ERR(ascii_runtime_measurements)) {
ret = PTR_ERR(ascii_runtime_measurements);
if (IS_ERR(dentry)) {
ret = PTR_ERR(dentry);
goto out;
}
runtime_measurements_count =
securityfs_create_file("runtime_measurements_count",
dentry = securityfs_create_file("runtime_measurements_count",
S_IRUSR | S_IRGRP, ima_dir, NULL,
&ima_measurements_count_ops);
if (IS_ERR(runtime_measurements_count)) {
ret = PTR_ERR(runtime_measurements_count);
if (IS_ERR(dentry)) {
ret = PTR_ERR(dentry);
goto out;
}
violations =
securityfs_create_file("violations", S_IRUSR | S_IRGRP,
dentry = securityfs_create_file("violations", S_IRUSR | S_IRGRP,
ima_dir, NULL, &ima_htable_violations_ops);
if (IS_ERR(violations)) {
ret = PTR_ERR(violations);
if (IS_ERR(dentry)) {
ret = PTR_ERR(dentry);
goto out;
}
ima_policy = securityfs_create_file("policy", POLICY_FILE_FLAGS,
dentry = securityfs_create_file("policy", POLICY_FILE_FLAGS,
ima_dir, NULL,
&ima_measure_policy_ops);
if (IS_ERR(ima_policy)) {
ret = PTR_ERR(ima_policy);
if (IS_ERR(dentry)) {
ret = PTR_ERR(dentry);
goto out;
}
return 0;
out:
securityfs_remove(ima_policy);
securityfs_remove(violations);
securityfs_remove(runtime_measurements_count);
securityfs_remove(ascii_runtime_measurements);
securityfs_remove(binary_runtime_measurements);
remove_securityfs_measurement_lists(ascii_securityfs_measurement_lists);
remove_securityfs_measurement_lists(binary_securityfs_measurement_lists);
securityfs_measurement_list_count = 0;