prefix is shown only if the hash algorithm is not SHA1 or MD5);
  - 'd-modsig': the digest of the event without the appended modsig;
  - 'n-ng': the name of the event, without size limitations;
- - 'sig': the file signature;
+ - 'sig': the file signature, or the EVM portable signature if the file
+   signature is not found;
  - 'modsig' the appended file signature;
  - 'buf': the buffer data that was used to generate the hash without size limitations;
+ - 'evmsig': the EVM portable signature;
 
 
 Below, there is the list of defined template descriptors:
 
         .field_show = ima_show_template_digest_ng},
        {.field_id = "modsig", .field_init = ima_eventmodsig_init,
         .field_show = ima_show_template_sig},
+       {.field_id = "evmsig", .field_init = ima_eventevmsig_init,
+        .field_show = ima_show_template_sig},
 };
 
 /*
 
  */
 
 #include "ima_template_lib.h"
+#include <linux/xattr.h>
 
 static bool ima_template_hash_algo_allowed(u8 algo)
 {
        struct evm_ima_xattr_data *xattr_value = event_data->xattr_value;
 
        if ((!xattr_value) || (xattr_value->type != EVM_IMA_XATTR_DIGSIG))
-               return 0;
+               return ima_eventevmsig_init(event_data, field_data);
 
        return ima_write_template_field_data(xattr_value, event_data->xattr_len,
                                             DATA_FMT_HEX, field_data);
        return ima_write_template_field_data(data, data_len, DATA_FMT_HEX,
                                             field_data);
 }
+
+/*
+ *  ima_eventevmsig_init - include the EVM portable signature as part of the
+ *  template data
+ */
+int ima_eventevmsig_init(struct ima_event_data *event_data,
+                        struct ima_field_data *field_data)
+{
+       struct evm_ima_xattr_data *xattr_data = NULL;
+       int rc = 0;
+
+       if (!event_data->file)
+               return 0;
+
+       rc = vfs_getxattr_alloc(&init_user_ns, file_dentry(event_data->file),
+                               XATTR_NAME_EVM, (char **)&xattr_data, 0,
+                               GFP_NOFS);
+       if (rc <= 0)
+               return 0;
+
+       if (xattr_data->type != EVM_XATTR_PORTABLE_DIGSIG) {
+               kfree(xattr_data);
+               return 0;
+       }
+
+       rc = ima_write_template_field_data((char *)xattr_data, rc, DATA_FMT_HEX,
+                                          field_data);
+       kfree(xattr_data);
+       return rc;
+}
 
                      struct ima_field_data *field_data);
 int ima_eventmodsig_init(struct ima_event_data *event_data,
                         struct ima_field_data *field_data);
+int ima_eventevmsig_init(struct ima_event_data *event_data,
+                        struct ima_field_data *field_data);
 #endif /* __LINUX_IMA_TEMPLATE_LIB_H */