Skip to content

Commit

Permalink
ima: free duplicate measurement memory
Browse files Browse the repository at this point in the history
Info about new measurements are cached in the iint for performance.  When
the inode is flushed from cache, the associated iint is flushed as well.
Subsequent access to the inode will cause the inode to be re-measured and
will attempt to add a duplicate entry to the measurement list.

This patch frees the duplicate measurement memory, fixing a memory leak.

Signed-off-by: Roberto Sassu <roberto.sassu@polito.it>
Signed-off-by: Mimi Zohar <zohar@us.ibm.com>
Cc: stable@vger.kernel.org
  • Loading branch information
Roberto Sassu authored and Mimi Zohar committed Dec 20, 2011
1 parent 114d6e9 commit 45fae74
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
4 changes: 2 additions & 2 deletions security/integrity/ima/ima_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,8 @@ void ima_store_measurement(struct integrity_iint_cache *iint,
strncpy(entry->template.file_name, filename, IMA_EVENT_NAME_LEN_MAX);

result = ima_store_template(entry, violation, inode);
if (!result)
if (!result || result == -EEXIST)
iint->flags |= IMA_MEASURED;
else
if (result < 0)
kfree(entry);
}
1 change: 1 addition & 0 deletions security/integrity/ima/ima_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ int ima_add_template_entry(struct ima_template_entry *entry, int violation,
memcpy(digest, entry->digest, sizeof digest);
if (ima_lookup_digest_entry(digest)) {
audit_cause = "hash_exists";
result = -EEXIST;
goto out;
}
}
Expand Down

0 comments on commit 45fae74

Please sign in to comment.