From: Mimi Zohar <zohar@linux.vnet.ibm.com>
To: Petko Manolov <petkan@mip-labs.com>
Cc: linux-security-module@vger.kernel.org,
linux-ima-devel@lists.sourceforge.net,
Dave Young <dyoung@redhat.com>,
kexec@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org,
Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com>
Subject: Re: [PATCH 1/7] ima: on soft reboot, restore the measurement list
Date: Fri, 05 Aug 2016 09:34:38 -0400 [thread overview]
Message-ID: <1470404078.2471.123.camel@linux.vnet.ibm.com> (raw)
In-Reply-To: <20160805084425.GA7572@localhost>
Hi Petko,
Thank you for review!
On Fri, 2016-08-05 at 11:44 +0300, Petko Manolov wrote:
> On 16-08-04 08:24:29, Mimi Zohar wrote:
> > The TPM PCRs are only reset on a hard reboot. In order to validate a
> > TPM's quote after a soft reboot (eg. kexec -e), the IMA measurement list
> > of the running kernel must be saved and restored on boot. This patch
> > restores the measurement list.
> >
> > Changelog:
> > - call ima_load_kexec_buffer() (Thiago)
> >
> > Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
> > ---
> > security/integrity/ima/Makefile | 1 +
> > security/integrity/ima/ima.h | 10 ++
> > security/integrity/ima/ima_init.c | 2 +
> > security/integrity/ima/ima_kexec.c | 55 +++++++++++
> > security/integrity/ima/ima_queue.c | 10 ++
> > security/integrity/ima/ima_template.c | 171 ++++++++++++++++++++++++++++++++++
> > 6 files changed, 249 insertions(+)
> > create mode 100644 security/integrity/ima/ima_kexec.c
> >
> > diff --git a/security/integrity/ima/Makefile b/security/integrity/ima/Makefile
> > index c34599f..c0ce7b1 100644
> > --- a/security/integrity/ima/Makefile
> > +++ b/security/integrity/ima/Makefile
> > @@ -8,4 +8,5 @@ obj-$(CONFIG_IMA) += ima.o
> > ima-y := ima_fs.o ima_queue.o ima_init.o ima_main.o ima_crypto.o ima_api.o \
> > ima_policy.o ima_template.o ima_template_lib.o ima_buffer.o
> > ima-$(CONFIG_IMA_APPRAISE) += ima_appraise.o
> > +ima-$(CONFIG_KEXEC_FILE) += ima_kexec.o
> > obj-$(CONFIG_IMA_BLACKLIST_KEYRING) += ima_mok.o
> > diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
> > index b5728da..84e8d36 100644
> > --- a/security/integrity/ima/ima.h
> > +++ b/security/integrity/ima/ima.h
> > @@ -102,6 +102,13 @@ struct ima_queue_entry {
> > };
> > extern struct list_head ima_measurements; /* list of all measurements */
> >
> > +/* Some details preceding the binary serialized measurement list */
> > +struct ima_kexec_hdr {
> > + unsigned short version;
> > + unsigned long buffer_size;
> > + unsigned long count;
> > +} __packed;
>
> Unless there is no real need for this structure to be packed i suggest dropping
> the attribute. When referenced through pointer 32bit ARM and MIPS (and likely
> all other 32bit RISC CPUs) use rather inefficient byte loads and stores.
>
> Worse, if, for example, ->count is going to be read/written concurrently from
> multiple threads we get torn loads/stores thus losing atomicity of the access.
This header is used to prefix the serialized binary measurement list
with some meta-data about the measurement list being restored.
Unfortunately kexec_get_handover_buffer() returns the segment size, not
the actual ima measurement list buffer size. The header info is set
using memcpy() once in ima_dump_measurement_list() and then the fields
are used in ima_restore_measurement_list() to verify the buffer.
The binary runtime measurement list is packed, so the other two
structures - binary_hdr_v1 and binary_data_v1 - must be packed. Does it
make sense for this header not to be packed as well? Would copying the
header fields to local variables before being used solve your concern?
Remember this code is used once on the kexec execute and again on
reboot.
Mimi
next prev parent reply other threads:[~2016-08-05 13:35 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-04 12:24 [PATCH 0/7] ima: carry the measurement list across kexec Mimi Zohar
2016-08-04 12:24 ` [PATCH 1/7] ima: on soft reboot, restore the measurement list Mimi Zohar
2016-08-05 8:44 ` Petko Manolov
2016-08-05 13:34 ` Mimi Zohar [this message]
2016-08-05 15:56 ` Petko Manolov
2016-08-09 10:59 ` Michael Ellerman
2016-08-09 13:01 ` Mimi Zohar
2016-08-09 13:19 ` Thiago Jung Bauermann
2016-08-09 13:35 ` David Laight
2016-08-09 14:02 ` Mimi Zohar
2016-08-09 13:55 ` Mimi Zohar
2016-08-09 14:06 ` Mimi Zohar
2016-08-09 23:13 ` Samuel Mendoza-Jonas
2016-08-10 3:41 ` Michael Ellerman
2016-08-10 5:05 ` Thiago Jung Bauermann
2016-08-10 9:52 ` Michael Ellerman
2016-08-10 12:54 ` Mimi Zohar
2016-08-10 14:32 ` [Linux-ima-devel] " Petko Manolov
2016-08-10 14:40 ` David Laight
2016-08-10 15:48 ` Petko Manolov
2016-08-04 12:24 ` [PATCH 2/7] ima: permit duplicate measurement list entries Mimi Zohar
2016-08-04 12:24 ` [PATCH 3/7] ima: maintain memory size needed for serializing the measurement list Mimi Zohar
2016-08-04 12:24 ` [PATCH 4/7] ima: serialize the binary_runtime_measurements Mimi Zohar
2016-08-04 12:24 ` [PATCH 5/7] ima: on soft reboot, save the measurement list Mimi Zohar
2016-08-04 12:24 ` [PATCH 6/7] ima: store the builtin/custom template definitions in a list Mimi Zohar
2016-08-04 12:24 ` [PATCH 7/7] ima: support restoring multiple template formats Mimi Zohar
2016-08-09 5:19 ` [PATCH 0/7] ima: carry the measurement list across kexec Balbir Singh
2016-08-09 12:36 ` Mimi Zohar
2016-08-11 7:38 ` Balbir Singh
2016-08-11 11:25 ` Mimi Zohar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1470404078.2471.123.camel@linux.vnet.ibm.com \
--to=zohar@linux.vnet.ibm.com \
--cc=bauerman@linux.vnet.ibm.com \
--cc=dyoung@redhat.com \
--cc=kexec@lists.infradead.org \
--cc=linux-ima-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=petkan@mip-labs.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).