ima: on soft reboot, restore the measurement list
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. Link: http://lkml.kernel.org/r/1480554346-29071-3-git-send-email-zohar@linux.vnet.ibm.com Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com> Acked-by: Dmitry Kasatkin <dmitry.kasatkin@gmail.com> Cc: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: Andreas Steffen <andreas.steffen@strongswan.org> Cc: Josh Sklar <sklar@linux.vnet.ibm.com> Cc: Dave Young <dyoung@redhat.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Baoquan He <bhe@redhat.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Stewart Smith <stewart@linux.vnet.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
467d278249
commit
94c3aac567
@@ -28,6 +28,10 @@
|
||||
|
||||
#include "../integrity.h"
|
||||
|
||||
#ifdef CONFIG_HAVE_IMA_KEXEC
|
||||
#include <asm/ima.h>
|
||||
#endif
|
||||
|
||||
enum ima_show_type { IMA_SHOW_BINARY, IMA_SHOW_BINARY_NO_FIELD_LEN,
|
||||
IMA_SHOW_BINARY_OLD_STRING_FMT, IMA_SHOW_ASCII };
|
||||
enum tpm_pcrs { TPM_PCR0 = 0, TPM_PCR8 = 8 };
|
||||
@@ -102,6 +106,21 @@ 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 {
|
||||
u16 version;
|
||||
u16 _reserved0;
|
||||
u32 _reserved1;
|
||||
u64 buffer_size;
|
||||
u64 count;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_HAVE_IMA_KEXEC
|
||||
void ima_load_kexec_buffer(void);
|
||||
#else
|
||||
static inline void ima_load_kexec_buffer(void) {}
|
||||
#endif /* CONFIG_HAVE_IMA_KEXEC */
|
||||
|
||||
/* Internal IMA function definitions */
|
||||
int ima_init(void);
|
||||
int ima_fs_init(void);
|
||||
@@ -122,6 +141,8 @@ int ima_init_crypto(void);
|
||||
void ima_putc(struct seq_file *m, void *data, int datalen);
|
||||
void ima_print_digest(struct seq_file *m, u8 *digest, u32 size);
|
||||
struct ima_template_desc *ima_template_desc_current(void);
|
||||
int ima_restore_measurement_entry(struct ima_template_entry *entry);
|
||||
int ima_restore_measurement_list(loff_t bufsize, void *buf);
|
||||
int ima_init_template(void);
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user