diff options
| author | Tycho Andersen <tycho@tycho.ws> | 2018-03-08 16:08:36 -0700 | 
|---|---|---|
| committer | Mimi Zohar <zohar@linux.vnet.ibm.com> | 2018-03-25 07:26:28 -0400 | 
| commit | e456ef88ae8c9ffd303e970c28dcce4474c3d356 (patch) | |
| tree | bbd534f2f48ad36368046195963f8ed973c5436e /security | |
| parent | fac37c628fd5d68fd7298d9b57ae8601ee1b4723 (diff) | |
| download | linux-e456ef88ae8c9ffd303e970c28dcce4474c3d356.tar.bz2 | |
ima: drop vla in ima_audit_measurement()
In keeping with the directive to get rid of VLAs [1], let's drop the VLA
from ima_audit_measurement(). We need to adjust the return type of
ima_audit_measurement, because now this function can fail if an allocation
fails.
[1]: https://lkml.org/lkml/2018/3/7/621
v2: just use audit_log_format instead of doing a second allocation
v3: ignore failures in ima_audit_measurement()
Signed-off-by: Tycho Andersen <tycho@tycho.ws>
Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
Diffstat (limited to 'security')
| -rw-r--r-- | security/integrity/ima/ima_api.c | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c index 33b4458cdbef..bf88236b7a0b 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c @@ -311,14 +311,17 @@ void ima_audit_measurement(struct integrity_iint_cache *iint,  			   const unsigned char *filename)  {  	struct audit_buffer *ab; -	char hash[(iint->ima_hash->length * 2) + 1]; +	char *hash;  	const char *algo_name = hash_algo_name[iint->ima_hash->algo]; -	char algo_hash[sizeof(hash) + strlen(algo_name) + 2];  	int i;  	if (iint->flags & IMA_AUDITED)  		return; +	hash = kzalloc((iint->ima_hash->length * 2) + 1, GFP_KERNEL); +	if (!hash) +		return; +  	for (i = 0; i < iint->ima_hash->length; i++)  		hex_byte_pack(hash + (i * 2), iint->ima_hash->digest[i]);  	hash[i * 2] = '\0'; @@ -326,18 +329,19 @@ void ima_audit_measurement(struct integrity_iint_cache *iint,  	ab = audit_log_start(current->audit_context, GFP_KERNEL,  			     AUDIT_INTEGRITY_RULE);  	if (!ab) -		return; +		goto out;  	audit_log_format(ab, "file=");  	audit_log_untrustedstring(ab, filename); -	audit_log_format(ab, " hash="); -	snprintf(algo_hash, sizeof(algo_hash), "%s:%s", algo_name, hash); -	audit_log_untrustedstring(ab, algo_hash); +	audit_log_format(ab, " hash=\"%s:%s\"", algo_name, hash);  	audit_log_task_info(ab, current);  	audit_log_end(ab);  	iint->flags |= IMA_AUDITED; +out: +	kfree(hash); +	return;  }  /* |