const char *audit_cause = "failed";
        struct inode *inode = file_inode(file);
        const char *filename = file->f_path.dentry->d_name.name;
+       struct ima_max_digest_data hash;
        int result = 0;
        int length;
        void *tmpbuf;
        u64 i_version;
-       struct {
-               struct ima_digest_data hdr;
-               char digest[IMA_MAX_DIGEST_SIZE];
-       } hash;
 
        /*
         * Always collect the modsig, because IMA might have already collected
 
        /*
         * Detecting file change is based on i_version. On filesystems
-        * which do not support i_version, support is limited to an initial
-        * measurement/appraisal/audit.
+        * which do not support i_version, support was originally limited
+        * to an initial measurement/appraisal/audit, but was modified to
+        * assume the file changed.
         */
        i_version = inode_query_iversion(inode);
        hash.hdr.algo = algo;
 
        struct integrity_iint_cache tmp_iint, *iint = &tmp_iint;
        struct ima_event_data event_data = { .iint = iint,
                                             .filename = boot_aggregate_name };
+       struct ima_max_digest_data hash;
        int result = -ENOMEM;
        int violation = 0;
-       struct {
-               struct ima_digest_data hdr;
-               char digest[TPM_MAX_DIGEST_SIZE];
-       } hash;
 
        memset(iint, 0, sizeof(*iint));
        memset(&hash, 0, sizeof(hash));
 
                                            .buf = buf,
                                            .buf_len = size};
        struct ima_template_desc *template;
-       struct {
-               struct ima_digest_data hdr;
-               char digest[IMA_MAX_DIGEST_SIZE];
-       } hash = {};
+       struct ima_max_digest_data hash;
        char digest_hash[IMA_MAX_DIGEST_SIZE];
        int digest_hash_len = hash_digest_size[ima_hash_algo];
        int violation = 0;
 
 int ima_eventdigest_init(struct ima_event_data *event_data,
                         struct ima_field_data *field_data)
 {
-       struct {
-               struct ima_digest_data hdr;
-               char digest[IMA_MAX_DIGEST_SIZE];
-       } hash;
+       struct ima_max_digest_data hash;
        u8 *cur_digest = NULL;
        u32 cur_digestsize = 0;
        struct inode *inode;
 
 #include <linux/types.h>
 #include <linux/integrity.h>
 #include <crypto/sha1.h>
+#include <crypto/hash.h>
 #include <linux/key.h>
 #include <linux/audit.h>
 
        u8 digest[];
 } __packed;
 
+/*
+ * Instead of wrapping the ima_digest_data struct inside a local structure
+ * with the maximum hash size, define ima_max_digest_data struct.
+ */
+struct ima_max_digest_data {
+       struct ima_digest_data hdr;
+       u8 digest[HASH_MAX_DIGESTSIZE];
+} __packed;
+
 /*
  * signature format v2 - for using with asymmetric keys
  */