Re: [PATCH 2/3 v5] add a new template field buf to contain the buffer

From: Roberto Sassu
Date: Mon May 20 2019 - 08:54:52 EST


On 5/18/2019 1:32 AM, prakhar srivastava wrote:
On Tue, May 14, 2019 at 6:22 AM Roberto Sassu <roberto.sassu@xxxxxxxxxx> wrote:

On 5/14/2019 7:07 AM, prakhar srivastava wrote:
On Mon, May 13, 2019 at 6:48 AM Roberto Sassu <roberto.sassu@xxxxxxxxxx> wrote:

On 5/11/2019 12:37 AM, Prakhar Srivastava wrote:
From: Prakhar Srivastava <prsriva02@xxxxxxxxx>

The buffer(cmdline args) added to the ima log cannot be attested
without having the actual buffer. Thus to make the measured buffer
available to store/read a new ima template (buf) is added.

Hi Prakhar

please fix the typos. More comments below.


+ buffer_event_data->type = IMA_XATTR_BUFFER;
+ buffer_event_data->buf_length = size;
+ memcpy(buffer_event_data->buf, buf, size);
+
+ event_data.xattr_value = (struct evm_ima_xattr_data *)buffer_event_data;
+ event_data.xattr_len = alloc_length;

I would prefer that you introduce two new fields in the ima_event_data
structure. You can initialize them directly with the parameters of
process_buffer_measurement().
I will make the edits, this will definitely save the kzalloc in this code
path.

ima_write_template_field_data() will make
a copy.

Since event_data->type is used to distinguish what the template field
should contain.
Removing the type and subsequent check in the template_init,
buf template fmt will result in the whole event_Data structure
being added to the log, which is not the expected output.
For buffer entries, the buf template fmt will contains the buffer itself.


The purpose of ima_event_data is to pass data to the init method of
template fields. Each method takes the data it needs.

If you pass event_data->buf and event_data->buf_len to
ima_write_template_field_data() this should be fine.

Hi Roberto,
I did some testing after making the needed code changes,
the output is as expected the buf template field only contains
the buf when the ima_event_data.buf is set.

However i just want to double check if adding two new fields to
the struct ima_event_data is approach you want me to take?
Mimi any concerns?

I think it should not be a problem. ima_event_data was introduced to
pass more information to a function for a new template field, without
changing the definition of existing functions.


what all tests do i need to run to confirm i am not
in-inadvertently breaking some thing else?

ima_event_data is not used for marshaling/unmarshaling. Adding two new
members to the structure won't change the behavior of existing code.

Roberto


Thanks,
Prakhar Srivastava

Roberto


+ .field_show = ima_show_template_buf},

Please update Documentation/security/IMA-templates.rst
Will update the documentation.

Thanks,
Prakhar Srivastava

Thanks

Roberto

--
HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063
Managing Director: Bo PENG, Jian LI, Yanli SHI

--
HUAWEI TECHNOLOGIES Duesseldorf GmbH, HRB 56063
Managing Director: Bo PENG, Jian LI, Yanli SHI