ima: Return error code obtained from securityfs functions
authorStefan Berger <stefanb@linux.ibm.com>
Tue, 1 Feb 2022 20:37:11 +0000 (15:37 -0500)
committerMimi Zohar <zohar@linux.ibm.com>
Tue, 15 Feb 2022 16:17:01 +0000 (11:17 -0500)
If an error occurs when creating a securityfs file, return the exact
error code to the caller.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
security/integrity/ima/ima_fs.c

index 3ad8f77..cd1683d 100644 (file)
@@ -452,47 +452,61 @@ static const struct file_operations ima_measure_policy_ops = {
 
 int __init ima_fs_init(void)
 {
+       int ret;
+
        ima_dir = securityfs_create_dir("ima", integrity_dir);
        if (IS_ERR(ima_dir))
-               return -1;
+               return PTR_ERR(ima_dir);
 
        ima_symlink = securityfs_create_symlink("ima", NULL, "integrity/ima",
                                                NULL);
-       if (IS_ERR(ima_symlink))
+       if (IS_ERR(ima_symlink)) {
+               ret = PTR_ERR(ima_symlink);
                goto out;
+       }
 
        binary_runtime_measurements =
            securityfs_create_file("binary_runtime_measurements",
                                   S_IRUSR | S_IRGRP, ima_dir, NULL,
                                   &ima_measurements_ops);
-       if (IS_ERR(binary_runtime_measurements))
+       if (IS_ERR(binary_runtime_measurements)) {
+               ret = PTR_ERR(binary_runtime_measurements);
                goto out;
+       }
 
        ascii_runtime_measurements =
            securityfs_create_file("ascii_runtime_measurements",
                                   S_IRUSR | S_IRGRP, ima_dir, NULL,
                                   &ima_ascii_measurements_ops);
-       if (IS_ERR(ascii_runtime_measurements))
+       if (IS_ERR(ascii_runtime_measurements)) {
+               ret = PTR_ERR(ascii_runtime_measurements);
                goto out;
+       }
 
        runtime_measurements_count =
            securityfs_create_file("runtime_measurements_count",
                                   S_IRUSR | S_IRGRP, ima_dir, NULL,
                                   &ima_measurements_count_ops);
-       if (IS_ERR(runtime_measurements_count))
+       if (IS_ERR(runtime_measurements_count)) {
+               ret = PTR_ERR(runtime_measurements_count);
                goto out;
+       }
 
        violations =
            securityfs_create_file("violations", S_IRUSR | S_IRGRP,
                                   ima_dir, NULL, &ima_htable_violations_ops);
-       if (IS_ERR(violations))
+       if (IS_ERR(violations)) {
+               ret = PTR_ERR(violations);
                goto out;
+       }
 
        ima_policy = securityfs_create_file("policy", POLICY_FILE_FLAGS,
                                            ima_dir, NULL,
                                            &ima_measure_policy_ops);
-       if (IS_ERR(ima_policy))
+       if (IS_ERR(ima_policy)) {
+               ret = PTR_ERR(ima_policy);
                goto out;
+       }
 
        return 0;
 out:
@@ -503,5 +517,6 @@ out:
        securityfs_remove(binary_runtime_measurements);
        securityfs_remove(ima_symlink);
        securityfs_remove(ima_dir);
-       return -1;
+
+       return ret;
 }