diff -urNp -x '*.orig' apparmor-3.0.1.org/parser/parser_main.c apparmor-3.0.1/parser/parser_main.c --- apparmor-3.0.1.org/parser/parser_main.c 2020-12-02 12:01:37.000000000 +0100 +++ apparmor-3.0.1/parser/parser_main.c 2021-04-01 22:28:09.569591753 +0200 @@ -1102,6 +1102,8 @@ int process_profile(int option, aa_kerne skip_cache = 1; if (cachename) { + cache_tstamp_final_check(); + /* Load a binary cache if it exists and is newest */ if (cache_hit(cachename)) { retval = process_binary(option, kernel_interface, diff -urNp -x '*.orig' apparmor-3.0.1.org/parser/policy_cache.c apparmor-3.0.1/parser/policy_cache.c --- apparmor-3.0.1.org/parser/policy_cache.c 2020-12-02 12:01:37.000000000 +0100 +++ apparmor-3.0.1/parser/policy_cache.c 2021-04-01 22:28:09.569591753 +0200 @@ -75,6 +75,14 @@ void set_cache_tstamp(struct timespec t) cache_tstamp = t; } +void cache_tstamp_final_check(void) +{ + if (tstamp_cmp(cache_tstamp, mru_policy_tstamp) != 0) { + pwarn(WARN_DEBUG_CACHE, "%s: cache mtime is different than policy files mtimes\n", progname); + mru_skip_cache = 1; + } +} + void update_mru_tstamp(FILE *file, const char *name) { struct stat stat_file; diff -urNp -x '*.orig' apparmor-3.0.1.org/parser/policy_cache.h apparmor-3.0.1/parser/policy_cache.h --- apparmor-3.0.1.org/parser/policy_cache.h 2020-12-02 12:01:37.000000000 +0100 +++ apparmor-3.0.1/parser/policy_cache.h 2021-04-01 22:28:09.569591753 +0200 @@ -38,6 +38,7 @@ extern int create_cache_dir; /* create extern int mru_skip_cache; void set_cache_tstamp(struct timespec t); +void cache_tstamp_final_check(void); void update_mru_tstamp(FILE *file, const char *path); bool valid_cached_file_version(const char *cachename); char *cache_filename(aa_policy_cache *pc, int dir, const char *basename);