IMA: Define a new template field buf
A buffer(kexec boot command line arguments) measured into IMA measuremnt list cannot be appraised, without already being aware of the buffer contents. Since hashes are non-reversible, raw buffer is needed for validation or regenerating hash for appraisal/attestation. Add support to store/read the buffer contents in HEX. The kexec cmdline hash is stored in the "d-ng" field of the template data. It can be verified using sudo cat /sys/kernel/security/integrity/ima/ascii_runtime_measurements | grep kexec-cmdline | cut -d' ' -f 6 | xxd -r -p | sha256sum - Add two new fields to ima_event_data to hold the buf and buf_len - Add a new template field 'buf' to be used to store/read the buffer data. - Updated process_buffer_meaurement to add the buffer to ima_event_data. process_buffer_measurement added in "Define a new IMA hook to measure the boot command line arguments" - Add a new template policy name ima-buf to represent 'd-ng|n-ng|buf' Signed-off-by: Prakhar Srivastava <prsriva02@gmail.com> Reviewed-by: Roberto Sassu <roberto.sassu@huawei.com> Reviewed-by: James Morris <jamorris@linux.microsoft.com> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
This commit is contained in:

committed by
Mimi Zohar

parent
b0935123a1
commit
86b4da8c0e
@@ -162,6 +162,12 @@ void ima_show_template_sig(struct seq_file *m, enum ima_show_type show,
|
||||
ima_show_template_field_data(m, show, DATA_FMT_HEX, field_data);
|
||||
}
|
||||
|
||||
void ima_show_template_buf(struct seq_file *m, enum ima_show_type show,
|
||||
struct ima_field_data *field_data)
|
||||
{
|
||||
ima_show_template_field_data(m, show, DATA_FMT_HEX, field_data);
|
||||
}
|
||||
|
||||
/**
|
||||
* ima_parse_buf() - Parses lengths and data from an input buffer
|
||||
* @bufstartp: Buffer start address.
|
||||
@@ -389,3 +395,18 @@ int ima_eventsig_init(struct ima_event_data *event_data,
|
||||
return ima_write_template_field_data(xattr_value, event_data->xattr_len,
|
||||
DATA_FMT_HEX, field_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* ima_eventbuf_init - include the buffer(kexec-cmldine) as part of the
|
||||
* template data.
|
||||
*/
|
||||
int ima_eventbuf_init(struct ima_event_data *event_data,
|
||||
struct ima_field_data *field_data)
|
||||
{
|
||||
if ((!event_data->buf) || (event_data->buf_len == 0))
|
||||
return 0;
|
||||
|
||||
return ima_write_template_field_data(event_data->buf,
|
||||
event_data->buf_len, DATA_FMT_HEX,
|
||||
field_data);
|
||||
}
|
||||
|
Reference in New Issue
Block a user