diff -ur apparmor-2.12.org/parser/parser_main.c apparmor-2.12/parser/parser_main.c --- apparmor-2.12.org/parser/parser_main.c 2017-12-24 09:48:31.000000000 +0100 +++ apparmor-2.12/parser/parser_main.c 2018-01-10 09:33:09.568033805 +0100 @@ -811,6 +811,8 @@ 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 -ur apparmor-2.12.org/parser/policy_cache.c apparmor-2.12/parser/policy_cache.c --- apparmor-2.12.org/parser/policy_cache.c 2017-12-24 09:48:31.000000000 +0100 +++ apparmor-2.12/parser/policy_cache.c 2018-01-10 09:30:27.533641865 +0100 @@ -78,6 +78,14 @@ cache_tstamp = t; } +void cache_tstamp_final_check(void) +{ + if (tstamp_cmp(cache_tstamp, mru_policy_tstamp) != 0) { + pwarn(WARN_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 -ur apparmor-2.12.org/parser/policy_cache.h apparmor-2.12/parser/policy_cache.h --- apparmor-2.12.org/parser/policy_cache.h 2017-12-24 09:48:31.000000000 +0100 +++ apparmor-2.12/parser/policy_cache.h 2018-01-10 09:31:45.412419437 +0100 @@ -39,6 +39,7 @@ extern int debug_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(const char *cachedir, const char *basename);