aboutsummaryrefslogtreecommitdiffstats
path: root/security/integrity/ima
diff options
context:
space:
mode:
authorMimi Zohar <zohar@linux.vnet.ibm.com>2014-07-28 07:59:49 -0400
committerMimi Zohar <zohar@linux.vnet.ibm.com>2014-09-02 17:03:35 -0400
commit9a8d289fbcb7dfd1fc74959e9930b406e76b2002 (patch)
treed06d101fc0a24619b7b7d8fff2951ac446e7300d /security/integrity/ima
parentfbff66108352d19b5cffa7dce26d7638c9dd4d70 (diff)
ima: fix ima_alloc_atfm()
The patch 3bcced39ea7d: "ima: use ahash API for file hash calculation" from Feb 26, 2014, leads to the following static checker warning: security/integrity/ima/ima_crypto.c:204 ima_alloc_atfm()          error: buffer overflow 'hash_algo_name' 17 <= 17 Unlike shash tfm memory, which is allocated on initialization, the ahash tfm memory allocation is deferred until needed. This patch fixes the case where ima_ahash_tfm has not yet been allocated and the file's signature/hash xattr contains an invalid hash algorithm. Although we can not verify the xattr, we still need to measure the file. Use the default IMA hash algorithm. Changelog: - set valid algo before testing tfm - based on Dmitry's comment Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com> Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
Diffstat (limited to 'security/integrity/ima')
-rw-r--r--security/integrity/ima/ima_crypto.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
index 0bd732843fe7..2d103dc13d90 100644
--- a/security/integrity/ima/ima_crypto.c
+++ b/security/integrity/ima/ima_crypto.c
@@ -200,7 +200,10 @@ static struct crypto_ahash *ima_alloc_atfm(enum hash_algo algo)
200 struct crypto_ahash *tfm = ima_ahash_tfm; 200 struct crypto_ahash *tfm = ima_ahash_tfm;
201 int rc; 201 int rc;
202 202
203 if ((algo != ima_hash_algo && algo < HASH_ALGO__LAST) || !tfm) { 203 if (algo < 0 || algo >= HASH_ALGO__LAST)
204 algo = ima_hash_algo;
205
206 if (algo != ima_hash_algo || !tfm) {
204 tfm = crypto_alloc_ahash(hash_algo_name[algo], 0, 0); 207 tfm = crypto_alloc_ahash(hash_algo_name[algo], 0, 0);
205 if (!IS_ERR(tfm)) { 208 if (!IS_ERR(tfm)) {
206 if (algo == ima_hash_algo) 209 if (algo == ima_hash_algo)