|
@@ -140,6 +140,7 @@ int ima_calc_file_hash(struct file *file, struct ima_digest_data *hash)
|
|
|
* Calculate the hash of template data
|
|
|
*/
|
|
|
static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
|
|
|
+ struct ima_template_desc *td,
|
|
|
int num_fields,
|
|
|
struct ima_digest_data *hash,
|
|
|
struct crypto_shash *tfm)
|
|
@@ -160,9 +161,13 @@ static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
|
|
|
return rc;
|
|
|
|
|
|
for (i = 0; i < num_fields; i++) {
|
|
|
- rc = crypto_shash_update(&desc.shash,
|
|
|
- (const u8 *) &field_data[i].len,
|
|
|
- sizeof(field_data[i].len));
|
|
|
+ if (strcmp(td->name, IMA_TEMPLATE_IMA_NAME) != 0) {
|
|
|
+ rc = crypto_shash_update(&desc.shash,
|
|
|
+ (const u8 *) &field_data[i].len,
|
|
|
+ sizeof(field_data[i].len));
|
|
|
+ if (rc)
|
|
|
+ break;
|
|
|
+ }
|
|
|
rc = crypto_shash_update(&desc.shash, field_data[i].data,
|
|
|
field_data[i].len);
|
|
|
if (rc)
|
|
@@ -175,7 +180,8 @@ static int ima_calc_field_array_hash_tfm(struct ima_field_data *field_data,
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-int ima_calc_field_array_hash(struct ima_field_data *field_data, int num_fields,
|
|
|
+int ima_calc_field_array_hash(struct ima_field_data *field_data,
|
|
|
+ struct ima_template_desc *desc, int num_fields,
|
|
|
struct ima_digest_data *hash)
|
|
|
{
|
|
|
struct crypto_shash *tfm;
|
|
@@ -185,7 +191,8 @@ int ima_calc_field_array_hash(struct ima_field_data *field_data, int num_fields,
|
|
|
if (IS_ERR(tfm))
|
|
|
return PTR_ERR(tfm);
|
|
|
|
|
|
- rc = ima_calc_field_array_hash_tfm(field_data, num_fields, hash, tfm);
|
|
|
+ rc = ima_calc_field_array_hash_tfm(field_data, desc, num_fields,
|
|
|
+ hash, tfm);
|
|
|
|
|
|
ima_free_tfm(tfm);
|
|
|
|