提交 9803d413 编写于 作者: R Roberto Sassu 提交者: Mimi Zohar

ima: pass the filename argument up to ima_add_template_entry()

Pass the filename argument to ima_add_template_entry() in order to
eliminate a dependency on template specific data (third argument of
integrity_audit_msg).

This change is required because, with the new template management
mechanism, the generation of a new measurement entry will be performed
by new specific functions (introduced in next patches) and the current IMA
code will not be aware anymore of how data is stored in the entry payload.
Signed-off-by: NRoberto Sassu <roberto.sassu@polito.it>
Signed-off-by: NMimi Zohar <zohar@linux.vnet.ibm.com>
上级 7d802a22
...@@ -69,7 +69,8 @@ int ima_fs_init(void); ...@@ -69,7 +69,8 @@ int ima_fs_init(void);
void ima_fs_cleanup(void); void ima_fs_cleanup(void);
int ima_inode_alloc(struct inode *inode); int ima_inode_alloc(struct inode *inode);
int ima_add_template_entry(struct ima_template_entry *entry, int violation, int ima_add_template_entry(struct ima_template_entry *entry, int violation,
const char *op, struct inode *inode); const char *op, struct inode *inode,
const unsigned char *filename);
int ima_calc_file_hash(struct file *file, struct ima_digest_data *hash); int ima_calc_file_hash(struct file *file, struct ima_digest_data *hash);
int ima_calc_buffer_hash(const void *data, int len, int ima_calc_buffer_hash(const void *data, int len,
struct ima_digest_data *hash); struct ima_digest_data *hash);
...@@ -107,7 +108,7 @@ void ima_store_measurement(struct integrity_iint_cache *iint, struct file *file, ...@@ -107,7 +108,7 @@ void ima_store_measurement(struct integrity_iint_cache *iint, struct file *file,
void ima_audit_measurement(struct integrity_iint_cache *iint, void ima_audit_measurement(struct integrity_iint_cache *iint,
const unsigned char *filename); const unsigned char *filename);
int ima_store_template(struct ima_template_entry *entry, int violation, int ima_store_template(struct ima_template_entry *entry, int violation,
struct inode *inode); struct inode *inode, const unsigned char *filename);
void ima_template_show(struct seq_file *m, void *e, enum ima_show_type show); void ima_template_show(struct seq_file *m, void *e, enum ima_show_type show);
const char *ima_d_path(struct path *path, char **pathbuf); const char *ima_d_path(struct path *path, char **pathbuf);
......
...@@ -40,7 +40,8 @@ static const char *IMA_TEMPLATE_NAME = "ima"; ...@@ -40,7 +40,8 @@ static const char *IMA_TEMPLATE_NAME = "ima";
* Returns 0 on success, error code otherwise * Returns 0 on success, error code otherwise
*/ */
int ima_store_template(struct ima_template_entry *entry, int ima_store_template(struct ima_template_entry *entry,
int violation, struct inode *inode) int violation, struct inode *inode,
const unsigned char *filename)
{ {
const char *op = "add_template_measure"; const char *op = "add_template_measure";
const char *audit_cause = "hashing_error"; const char *audit_cause = "hashing_error";
...@@ -67,7 +68,7 @@ int ima_store_template(struct ima_template_entry *entry, ...@@ -67,7 +68,7 @@ int ima_store_template(struct ima_template_entry *entry,
} }
memcpy(entry->digest, hash.hdr.digest, hash.hdr.length); memcpy(entry->digest, hash.hdr.digest, hash.hdr.length);
} }
result = ima_add_template_entry(entry, violation, op, inode); result = ima_add_template_entry(entry, violation, op, inode, filename);
return result; return result;
} }
...@@ -96,7 +97,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename, ...@@ -96,7 +97,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename,
} }
memset(&entry->template, 0, sizeof(entry->template)); memset(&entry->template, 0, sizeof(entry->template));
strncpy(entry->template.file_name, filename, IMA_EVENT_NAME_LEN_MAX); strncpy(entry->template.file_name, filename, IMA_EVENT_NAME_LEN_MAX);
result = ima_store_template(entry, violation, inode); result = ima_store_template(entry, violation, inode, filename);
if (result < 0) if (result < 0)
kfree(entry); kfree(entry);
err_out: err_out:
...@@ -248,7 +249,7 @@ void ima_store_measurement(struct integrity_iint_cache *iint, ...@@ -248,7 +249,7 @@ void ima_store_measurement(struct integrity_iint_cache *iint,
(strlen(filename) > IMA_EVENT_NAME_LEN_MAX) ? (strlen(filename) > IMA_EVENT_NAME_LEN_MAX) ?
file->f_dentry->d_name.name : filename); file->f_dentry->d_name.name : filename);
result = ima_store_template(entry, violation, inode); result = ima_store_template(entry, violation, inode, filename);
if (!result || result == -EEXIST) if (!result || result == -EEXIST)
iint->flags |= IMA_MEASURED; iint->flags |= IMA_MEASURED;
if (result < 0) if (result < 0)
......
...@@ -71,7 +71,8 @@ static void __init ima_add_boot_aggregate(void) ...@@ -71,7 +71,8 @@ static void __init ima_add_boot_aggregate(void)
memcpy(entry->template.digest, hash.hdr.digest, memcpy(entry->template.digest, hash.hdr.digest,
hash.hdr.length); hash.hdr.length);
} }
result = ima_store_template(entry, violation, NULL); result = ima_store_template(entry, violation, NULL,
boot_aggregate_name);
if (result < 0) if (result < 0)
kfree(entry); kfree(entry);
return; return;
......
...@@ -104,7 +104,8 @@ static int ima_pcr_extend(const u8 *hash) ...@@ -104,7 +104,8 @@ static int ima_pcr_extend(const u8 *hash)
* and extend the pcr. * and extend the pcr.
*/ */
int ima_add_template_entry(struct ima_template_entry *entry, int violation, int ima_add_template_entry(struct ima_template_entry *entry, int violation,
const char *op, struct inode *inode) const char *op, struct inode *inode,
const unsigned char *filename)
{ {
u8 digest[TPM_DIGEST_SIZE]; u8 digest[TPM_DIGEST_SIZE];
const char *audit_cause = "hash_added"; const char *audit_cause = "hash_added";
...@@ -141,8 +142,7 @@ int ima_add_template_entry(struct ima_template_entry *entry, int violation, ...@@ -141,8 +142,7 @@ int ima_add_template_entry(struct ima_template_entry *entry, int violation,
} }
out: out:
mutex_unlock(&ima_extend_list_mutex); mutex_unlock(&ima_extend_list_mutex);
integrity_audit_msg(AUDIT_INTEGRITY_PCR, inode, integrity_audit_msg(AUDIT_INTEGRITY_PCR, inode, filename,
entry->template.file_name,
op, audit_cause, result, audit_info); op, audit_cause, result, audit_info);
return result; return result;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册