Skip to content

Commit 1129d31

Browse files
kstruczymimizohar
authored andcommitted
ima: Fix ima digest hash table key calculation
Function hash_long() accepts unsigned long, while currently only one byte is passed from ima_hash_key(), which calculates a key for ima_htable. Given that hashing the digest does not give clear benefits compared to using the digest itself, remove hash_long() and return the modulus calculated on the first two bytes of the digest with the number of slots. Also reduce the depth of the hash table by doubling the number of slots. Cc: [email protected] Fixes: 3323eec ("integrity: IMA as an integrity service provider") Co-developed-by: Roberto Sassu <[email protected]> Signed-off-by: Roberto Sassu <[email protected]> Signed-off-by: Krzysztof Struczynski <[email protected]> Acked-by: [email protected] (big endian system concerns) Signed-off-by: Mimi Zohar <[email protected]>
1 parent 2592677 commit 1129d31

File tree

1 file changed

+4
-3
lines changed
  • security/integrity/ima

1 file changed

+4
-3
lines changed

security/integrity/ima/ima.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ enum tpm_pcrs { TPM_PCR0 = 0, TPM_PCR8 = 8 };
3636
#define IMA_DIGEST_SIZE SHA1_DIGEST_SIZE
3737
#define IMA_EVENT_NAME_LEN_MAX 255
3838

39-
#define IMA_HASH_BITS 9
39+
#define IMA_HASH_BITS 10
4040
#define IMA_MEASURE_HTABLE_SIZE (1 << IMA_HASH_BITS)
4141

4242
#define IMA_TEMPLATE_FIELD_ID_MAX_LEN 16
@@ -179,9 +179,10 @@ struct ima_h_table {
179179
};
180180
extern struct ima_h_table ima_htable;
181181

182-
static inline unsigned long ima_hash_key(u8 *digest)
182+
static inline unsigned int ima_hash_key(u8 *digest)
183183
{
184-
return hash_long(*digest, IMA_HASH_BITS);
184+
/* there is no point in taking a hash of part of a digest */
185+
return (digest[0] | digest[1] << 8) % IMA_MEASURE_HTABLE_SIZE;
185186
}
186187

187188
#define __ima_hooks(hook) \

0 commit comments

Comments
 (0)