The aa_policy_cache_create() function had a name that didn't quite match its actions. It doesn't create a new policy cache. It actually requires an existing policy cache, with some sort of .features file, to already exist.
It unconditionally makes a policy cache "valid" by clearing all of the files and creating a new .features file from the current running kernel. Signed-off-by: Tyler Hicks <[email protected]> --- libraries/libapparmor/include/sys/apparmor.h | 2 +- libraries/libapparmor/src/libapparmor.map | 2 +- libraries/libapparmor/src/policy_cache.c | 4 ++-- parser/parser_main.c | 2 +- tests/regression/apparmor/aa_policy_cache.c | 14 +++++++------- tests/regression/apparmor/aa_policy_cache.sh | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/libraries/libapparmor/include/sys/apparmor.h b/libraries/libapparmor/include/sys/apparmor.h index 99ce36b..43d6efc 100644 --- a/libraries/libapparmor/include/sys/apparmor.h +++ b/libraries/libapparmor/include/sys/apparmor.h @@ -147,7 +147,7 @@ aa_policy_cache *aa_policy_cache_ref(aa_policy_cache *policy_cache); void aa_policy_cache_unref(aa_policy_cache *policy_cache); bool aa_policy_cache_is_valid(aa_policy_cache *policy_cache); -int aa_policy_cache_create(aa_policy_cache *policy_cache); +int aa_policy_cache_make_valid(aa_policy_cache *policy_cache); int aa_policy_cache_remove(const char *path); int aa_policy_cache_replace_all(aa_policy_cache *policy_cache, aa_kernel_interface *kernel_interface); diff --git a/libraries/libapparmor/src/libapparmor.map b/libraries/libapparmor/src/libapparmor.map index 3f43494..2f440f0 100644 --- a/libraries/libapparmor/src/libapparmor.map +++ b/libraries/libapparmor/src/libapparmor.map @@ -77,7 +77,7 @@ APPARMOR_2.10 { aa_policy_cache_ref; aa_policy_cache_unref; aa_policy_cache_is_valid; - aa_policy_cache_create; + aa_policy_cache_make_valid; aa_policy_cache_remove; aa_policy_cache_replace_all; local: diff --git a/libraries/libapparmor/src/policy_cache.c b/libraries/libapparmor/src/policy_cache.c index a9e43bb..e438439 100644 --- a/libraries/libapparmor/src/policy_cache.c +++ b/libraries/libapparmor/src/policy_cache.c @@ -225,13 +225,13 @@ bool aa_policy_cache_is_valid(aa_policy_cache *policy_cache) } /** - * aa_policy_cache_create - creates a valid policy_cache for the currently running kernel + * aa_policy_cache_make_valid - empties the policy_cache and makes it valid for the currently running kernel * @policy_cache: the policy_cache * * Returns: 0 on success, -1 on error with errno set and features pointing to * NULL */ -int aa_policy_cache_create(aa_policy_cache *policy_cache) +int aa_policy_cache_make_valid(aa_policy_cache *policy_cache) { return create_cache(policy_cache, policy_cache->kernel_features); } diff --git a/parser/parser_main.c b/parser/parser_main.c index 8aee148..1dc3088 100644 --- a/parser/parser_main.c +++ b/parser/parser_main.c @@ -929,7 +929,7 @@ int main(int argc, char *argv[]) skip_read_cache = 0; } else if (!aa_policy_cache_is_valid(policy_cache)) { if (write_cache && cond_clear_cache && - aa_policy_cache_create(policy_cache)) { + aa_policy_cache_make_valid(policy_cache)) { if (show_cache) PERROR("Cache write disabled: Cannot create cache '%s': %m\n", cacheloc); diff --git a/tests/regression/apparmor/aa_policy_cache.c b/tests/regression/apparmor/aa_policy_cache.c index b08fd1f..cb4bc71 100644 --- a/tests/regression/apparmor/aa_policy_cache.c +++ b/tests/regression/apparmor/aa_policy_cache.c @@ -22,7 +22,7 @@ #include <sys/apparmor.h> -#define OPT_CREATE "create" +#define OPT_MAKE_VALID "make-valid" #define OPT_IS_VALID "is-valid" #define OPT_NEW "new" #define OPT_NEW_CREATE "new-create" @@ -40,12 +40,12 @@ static void usage(const char *prog) " %s %s <PATH>\n" " %s %s <PROFILE_NAME>\n" " %s %s <PATH>\n", - prog, OPT_CREATE, prog, OPT_IS_VALID, prog, OPT_NEW, + prog, OPT_MAKE_VALID, prog, OPT_IS_VALID, prog, OPT_NEW, prog, OPT_NEW_CREATE, prog, OPT_REMOVE, prog, OPT_REMOVE_POLICY, prog, OPT_REPLACE_ALL); } -static int test_create(const char *path) +static int test_make_valid(const char *path) { aa_features *features = NULL; aa_policy_cache *policy_cache = NULL; @@ -61,8 +61,8 @@ static int test_create(const char *path) goto out; } - if (aa_policy_cache_create(policy_cache)) { - perror("FAIL - aa_policy_cache_create"); + if (aa_policy_cache_make_valid(policy_cache)) { + perror("FAIL - aa_policy_cache_make_valid"); goto out; } @@ -204,8 +204,8 @@ int main(int argc, char **argv) exit(1); } - if (strcmp(argv[1], OPT_CREATE) == 0) { - rc = test_create(argv[2]); + if (strcmp(argv[1], OPT_MAKE_VALID) == 0) { + rc = test_make_valid(argv[2]); } else if (strcmp(argv[1], OPT_IS_VALID) == 0) { rc = test_is_valid(argv[2]); } else if (strcmp(argv[1], OPT_NEW) == 0) { diff --git a/tests/regression/apparmor/aa_policy_cache.sh b/tests/regression/apparmor/aa_policy_cache.sh index fb9a830..427ddfa 100755 --- a/tests/regression/apparmor/aa_policy_cache.sh +++ b/tests/regression/apparmor/aa_policy_cache.sh @@ -117,12 +117,12 @@ runchecktest "AA_POLICY_CACHE is-valid (no cachedir)" fail is-valid "$cachedir" create_cachedir install_bad_features_file -runchecktest "AA_POLICY_CACHE create (bad .features)" pass create "$cachedir" -runchecktest "AA_POLICY_CACHE create (good .features)" pass create "$cachedir" +runchecktest "AA_POLICY_CACHE make-valid (bad .features)" pass make-valid "$cachedir" +runchecktest "AA_POLICY_CACHE make-valid (good .features)" pass make-valid "$cachedir" remove_features_file -runchecktest "AA_POLICY_CACHE create (no .features)" fail create "$cachedir" +runchecktest "AA_POLICY_CACHE make-valid (no .features)" fail make-valid "$cachedir" remove_cachedir -runchecktest "AA_POLICY_CACHE create (no cachedir)" fail create "$cachedir" +runchecktest "AA_POLICY_CACHE make-valid (no cachedir)" fail make-valid "$cachedir" # Make sure that no test policies are already loaded verify_policies_are_not_loaded -- 2.1.4 -- AppArmor mailing list [email protected] Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
