Commit 55a82ab3 authored by Kylene Jo Hall's avatar Kylene Jo Hall Committed by Linus Torvalds

[PATCH] tpm: add bios measurement log

According to the TCG specifications measurements or hashes of the BIOS code
and data are extended into TPM PCRS and a log is kept in an ACPI table of
these extensions for later validation if desired.  This patch exports the
values in the ACPI table through a security-fs seq_file.
Signed-off-by: default avatarSeiji Munetoh <munetoh@jp.ibm.com>
Signed-off-by: default avatarStefan Berger <stefanb@us.ibm.com>
Signed-off-by: default avatarReiner Sailer <sailer@us.ibm.com>
Signed-off-by: default avatarKylene Hall <kjhall@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 485a6435
...@@ -204,11 +204,13 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size, ...@@ -204,11 +204,13 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size,
return AE_OK; return AE_OK;
} }
EXPORT_SYMBOL_GPL(acpi_os_map_memory);
void acpi_os_unmap_memory(void __iomem * virt, acpi_size size) void acpi_os_unmap_memory(void __iomem * virt, acpi_size size)
{ {
iounmap(virt); iounmap(virt);
} }
EXPORT_SYMBOL_GPL(acpi_os_unmap_memory);
#ifdef ACPI_FUTURE_USAGE #ifdef ACPI_FUTURE_USAGE
acpi_status acpi_status
......
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
# Makefile for the kernel tpm device drivers. # Makefile for the kernel tpm device drivers.
# #
obj-$(CONFIG_TCG_TPM) += tpm.o obj-$(CONFIG_TCG_TPM) += tpm.o
ifdef CONFIG_ACPI
obj-$(CONFIG_TCG_TPM) += tpm_bios.o
endif
obj-$(CONFIG_TCG_NSC) += tpm_nsc.o obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
...@@ -466,6 +466,7 @@ void tpm_remove_hardware(struct device *dev) ...@@ -466,6 +466,7 @@ void tpm_remove_hardware(struct device *dev)
kfree(chip->vendor->miscdev.name); kfree(chip->vendor->miscdev.name);
sysfs_remove_group(&dev->kobj, chip->vendor->attr_group); sysfs_remove_group(&dev->kobj, chip->vendor->attr_group);
tpm_bios_log_teardown(chip->bios_dir);
dev_mask[chip->dev_num / TPM_NUM_MASK_ENTRIES ] &= dev_mask[chip->dev_num / TPM_NUM_MASK_ENTRIES ] &=
~(1 << (chip->dev_num % TPM_NUM_MASK_ENTRIES)); ~(1 << (chip->dev_num % TPM_NUM_MASK_ENTRIES));
...@@ -593,6 +594,8 @@ dev_num_search_complete: ...@@ -593,6 +594,8 @@ dev_num_search_complete:
sysfs_create_group(&dev->kobj, chip->vendor->attr_group); sysfs_create_group(&dev->kobj, chip->vendor->attr_group);
chip->bios_dir = tpm_bios_log_setup(devname);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(tpm_register_hardware); EXPORT_SYMBOL_GPL(tpm_register_hardware);
......
...@@ -82,6 +82,8 @@ struct tpm_chip { ...@@ -82,6 +82,8 @@ struct tpm_chip {
struct tpm_vendor_specific *vendor; struct tpm_vendor_specific *vendor;
struct dentry **bios_dir;
struct list_head list; struct list_head list;
}; };
...@@ -107,3 +109,16 @@ extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *); ...@@ -107,3 +109,16 @@ extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *);
extern void tpm_remove_hardware(struct device *); extern void tpm_remove_hardware(struct device *);
extern int tpm_pm_suspend(struct device *, pm_message_t); extern int tpm_pm_suspend(struct device *, pm_message_t);
extern int tpm_pm_resume(struct device *); extern int tpm_pm_resume(struct device *);
#ifdef CONFIG_ACPI
extern struct dentry ** tpm_bios_log_setup(char *);
extern void tpm_bios_log_teardown(struct dentry **);
#else
static inline struct dentry* tpm_bios_log_setup(char *name)
{
return NULL;
}
static inline void tpm_bios_log_teardown(struct dentry **dir)
{
}
#endif
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment