diff mbox series

[ima-evm-utils,2/4] Define and verify the template data length upper bounds

Message ID 20220914142225.1381077-3-zohar@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series misc bug and other fixes | expand

Commit Message

Mimi Zohar Sept. 14, 2022, 2:22 p.m. UTC
The template data length is variable, based on the template format.
Define some sort of upper bounds.

Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
---
 src/evmctl.c |  3 ++-
 src/imaevm.h | 10 ++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

Comments

Stefan Berger Sept. 14, 2022, 9:28 p.m. UTC | #1
On 9/14/22 10:22, Mimi Zohar wrote:
> The template data length is variable, based on the template format.
> Define some sort of upper bounds.
> 
> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
> ---
>   src/evmctl.c |  3 ++-
>   src/imaevm.h | 10 ++++++++++
>   2 files changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/evmctl.c b/src/evmctl.c
> index bcf724c828f7..9ab804fee37a 100644
> --- a/src/evmctl.c
> +++ b/src/evmctl.c
> @@ -2189,7 +2189,8 @@ static int ima_measurement(const char *file)
>   				log_err("Unable to read template length\n");
>   				goto out;
>   			}
> -			if (entry.template_len == 0) {
> +			if (entry.template_len == 0 ||
> +			    entry.template_len > MAX_TEMPLATE_SIZE) {
>   				log_err("Invalid template data len\n");
>   				goto out;
>   			}
> diff --git a/src/imaevm.h b/src/imaevm.h
> index 8114bd051514..c43312d01dec 100644
> --- a/src/imaevm.h
> +++ b/src/imaevm.h
> @@ -91,6 +91,16 @@
>   #define MAX_DIGEST_SIZE		64
>   #define MAX_SIGNATURE_SIZE	1024
>   
> +/*
> + * The maximum template data size is dependent on the template format. For
> + * example the 'ima-modsig' template includes two signatures - one for the
> + * entire file, the other without the appended signature - and other fields
> + * (e.g. file digest, file name, file digest without the appended signature).
> + *
> + * Other template formats are much smaller.
> + */
> +#define MAX_TEMPLATE_SIZE	(MAX_SIGNATURE_SIZE * 4)

Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>

> +
>   #define __packed __attribute__((packed))
>   
>   enum evm_ima_xattr_type {
diff mbox series

Patch

diff --git a/src/evmctl.c b/src/evmctl.c
index bcf724c828f7..9ab804fee37a 100644
--- a/src/evmctl.c
+++ b/src/evmctl.c
@@ -2189,7 +2189,8 @@  static int ima_measurement(const char *file)
 				log_err("Unable to read template length\n");
 				goto out;
 			}
-			if (entry.template_len == 0) {
+			if (entry.template_len == 0 ||
+			    entry.template_len > MAX_TEMPLATE_SIZE) {
 				log_err("Invalid template data len\n");
 				goto out;
 			}
diff --git a/src/imaevm.h b/src/imaevm.h
index 8114bd051514..c43312d01dec 100644
--- a/src/imaevm.h
+++ b/src/imaevm.h
@@ -91,6 +91,16 @@ 
 #define MAX_DIGEST_SIZE		64
 #define MAX_SIGNATURE_SIZE	1024
 
+/*
+ * The maximum template data size is dependent on the template format. For
+ * example the 'ima-modsig' template includes two signatures - one for the
+ * entire file, the other without the appended signature - and other fields
+ * (e.g. file digest, file name, file digest without the appended signature).
+ *
+ * Other template formats are much smaller.
+ */
+#define MAX_TEMPLATE_SIZE	(MAX_SIGNATURE_SIZE * 4)
+
 #define __packed __attribute__((packed))
 
 enum evm_ima_xattr_type {