From: Petko Manolov <petkan@mip-labs.com>
To: Mimi Zohar <zohar@linux.vnet.ibm.com>
Cc: linuxppc-dev@lists.ozlabs.org, kexec@lists.infradead.org,
linux-kernel@vger.kernel.org,
Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com>,
linux-security-module@vger.kernel.org,
linux-ima-devel@lists.sourceforge.net,
Dave Young <dyoung@redhat.com>
Subject: Re: [PATCH 1/7] ima: on soft reboot, restore the measurement list
Date: Fri, 5 Aug 2016 18:56:02 +0300 [thread overview]
Message-ID: <20160805155602.GA1738@localhost> (raw)
In-Reply-To: <1470404078.2471.123.camel@linux.vnet.ibm.com>
On 16-08-05 09:34:38, Mimi Zohar wrote:
> 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.
As long as there is no concurrent reads/writes this should be OK.
> 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?
Copying to aligned variables would be necessary only if:
a) some sort of atomicity is needed, and/or
б) speed is of concern;
> Remember this code is used once on the kexec execute and again on reboot.
If we don't need a) _and_ b) then you don't need to bother.
Petko
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Petko Manolov <petkan@mip-labs.com>
To: Mimi Zohar <zohar@linux.vnet.ibm.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, 5 Aug 2016 18:56:02 +0300 [thread overview]
Message-ID: <20160805155602.GA1738@localhost> (raw)
In-Reply-To: <1470404078.2471.123.camel@linux.vnet.ibm.com>
On 16-08-05 09:34:38, Mimi Zohar wrote:
> 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.
As long as there is no concurrent reads/writes this should be OK.
> 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?
Copying to aligned variables would be necessary only if:
a) some sort of atomicity is needed, and/or
б) speed is of concern;
> Remember this code is used once on the kexec execute and again on reboot.
If we don't need a) _and_ b) then you don't need to bother.
Petko
next prev parent reply other threads:[~2016-08-05 15:56 UTC|newest]
Thread overview: 62+ 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 ` Mimi Zohar
2016-08-04 12:24 ` [PATCH 1/7] ima: on soft reboot, restore the measurement list Mimi Zohar
2016-08-04 12:24 ` Mimi Zohar
2016-08-05 8:44 ` Petko Manolov
2016-08-05 8:44 ` Petko Manolov
2016-08-05 13:34 ` Mimi Zohar
2016-08-05 13:34 ` Mimi Zohar
2016-08-05 15:56 ` Petko Manolov [this message]
2016-08-05 15:56 ` Petko Manolov
2016-08-09 10:59 ` Michael Ellerman
2016-08-09 10:59 ` Michael Ellerman
2016-08-09 13:01 ` Mimi Zohar
2016-08-09 13:01 ` Mimi Zohar
2016-08-09 13:19 ` Thiago Jung Bauermann
2016-08-09 13:19 ` Thiago Jung Bauermann
2016-08-09 13:35 ` David Laight
2016-08-09 13:35 ` David Laight
2016-08-09 13:35 ` David Laight
2016-08-09 14:02 ` Mimi Zohar
2016-08-09 14:02 ` Mimi Zohar
2016-08-09 13:55 ` Mimi Zohar
2016-08-09 13:55 ` Mimi Zohar
2016-08-09 14:06 ` Mimi Zohar
2016-08-09 14:06 ` Mimi Zohar
2016-08-09 23:13 ` Samuel Mendoza-Jonas
2016-08-09 23:13 ` Samuel Mendoza-Jonas
2016-08-10 3:41 ` Michael Ellerman
2016-08-10 3:41 ` Michael Ellerman
2016-08-10 5:05 ` Thiago Jung Bauermann
2016-08-10 5:05 ` Thiago Jung Bauermann
2016-08-10 9:52 ` Michael Ellerman
2016-08-10 9:52 ` Michael Ellerman
2016-08-10 12:54 ` Mimi Zohar
2016-08-10 12:54 ` Mimi Zohar
2016-08-10 14:32 ` [Linux-ima-devel] " Petko Manolov
2016-08-10 14:32 ` Petko Manolov
2016-08-10 14:40 ` David Laight
2016-08-10 14:40 ` David Laight
2016-08-10 14:40 ` David Laight
2016-08-10 15:48 ` Petko Manolov
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 ` 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 ` Mimi Zohar
2016-08-04 12:24 ` [PATCH 4/7] ima: serialize the binary_runtime_measurements Mimi Zohar
2016-08-04 12:24 ` 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 ` 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 ` Mimi Zohar
2016-08-04 12:24 ` [PATCH 7/7] ima: support restoring multiple template formats Mimi Zohar
2016-08-04 12:24 ` Mimi Zohar
2016-08-09 5:19 ` [PATCH 0/7] ima: carry the measurement list across kexec Balbir Singh
2016-08-09 5:19 ` Balbir Singh
2016-08-09 12:36 ` Mimi Zohar
2016-08-09 12:36 ` Mimi Zohar
2016-08-11 7:38 ` Balbir Singh
2016-08-11 7:38 ` Balbir Singh
2016-08-11 11:25 ` Mimi Zohar
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=20160805155602.GA1738@localhost \
--to=petkan@mip-labs.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=zohar@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.