Merge tag 'efi-urgent-2020-06-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull EFI fixes from Ingo Molnar: - Fix build regression on v4.8 and older - Robustness fix for TPM log parsing code - kobject refcount fix for the ESRT parsing code - Two efivarfs fixes to make it behave more like an ordinary file system - Style fixup for zero length arrays - Fix a regression in path separator handling in the initrd loader - Fix a missing prototype warning - Add some kerneldoc headers for newly introduced stub routines - Allow support for SSDT overrides via EFI variables to be disabled - Report CPU mode and MMU state upon entry for 32-bit ARM - Use the correct stack pointer alignment when entering from mixed mode * tag 'efi-urgent-2020-06-28' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: efi/libstub: arm: Print CPU boot mode and MMU state at boot efi/libstub: arm: Omit arch specific config table matching array on arm64 efi/x86: Setup stack correctly for efi_pe_entry efi: Make it possible to disable efivar_ssdt entirely efi/libstub: Descriptions for stub helper functions efi/libstub: Fix path separator regression efi/libstub: Fix missing-prototype warning for skip_spaces() efi: Replace zero-length array and use struct_size() helper efivarfs: Don't return -EINTR when rate-limiting reads efivarfs: Update inode modification time for successful writes efi/esrt: Fix reference count leak in esre_create_sysfs_entry. efi/tpm: Verify event log header before parsing efi/x86: Fix build with gcc 4
This commit is contained in:
@@ -350,6 +350,7 @@ void efi_native_runtime_setup(void);
|
||||
* associated with ConOut
|
||||
*/
|
||||
#define LINUX_EFI_ARM_SCREEN_INFO_TABLE_GUID EFI_GUID(0xe03fc20a, 0x85dc, 0x406e, 0xb9, 0x0e, 0x4a, 0xb5, 0x02, 0x37, 0x1d, 0x95)
|
||||
#define LINUX_EFI_ARM_CPU_STATE_TABLE_GUID EFI_GUID(0xef79e4aa, 0x3c3d, 0x4989, 0xb9, 0x02, 0x07, 0xa9, 0x43, 0xe5, 0x50, 0xd2)
|
||||
#define LINUX_EFI_LOADER_ENTRY_GUID EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f)
|
||||
#define LINUX_EFI_RANDOM_SEED_TABLE_GUID EFI_GUID(0x1ce1e5bc, 0x7ceb, 0x42f2, 0x81, 0xe5, 0x8a, 0xad, 0xf1, 0x80, 0xf5, 0x7b)
|
||||
#define LINUX_EFI_TPM_EVENT_LOG_GUID EFI_GUID(0xb7799cb0, 0xeca2, 0x4943, 0x96, 0x67, 0x1f, 0xae, 0x07, 0xb7, 0x47, 0xfa)
|
||||
@@ -1236,14 +1237,11 @@ struct linux_efi_memreserve {
|
||||
struct {
|
||||
phys_addr_t base;
|
||||
phys_addr_t size;
|
||||
} entry[0];
|
||||
} entry[];
|
||||
};
|
||||
|
||||
#define EFI_MEMRESERVE_SIZE(count) (sizeof(struct linux_efi_memreserve) + \
|
||||
(count) * sizeof(((struct linux_efi_memreserve *)0)->entry[0]))
|
||||
|
||||
#define EFI_MEMRESERVE_COUNT(size) (((size) - sizeof(struct linux_efi_memreserve)) \
|
||||
/ sizeof(((struct linux_efi_memreserve *)0)->entry[0]))
|
||||
/ sizeof_field(struct linux_efi_memreserve, entry[0]))
|
||||
|
||||
void __init efi_arch_mem_reserve(phys_addr_t addr, u64 size);
|
||||
|
||||
|
@@ -81,6 +81,8 @@ struct tcg_efi_specid_event_algs {
|
||||
u16 digest_size;
|
||||
} __packed;
|
||||
|
||||
#define TCG_SPECID_SIG "Spec ID Event03"
|
||||
|
||||
struct tcg_efi_specid_event_head {
|
||||
u8 signature[16];
|
||||
u32 platform_class;
|
||||
@@ -171,6 +173,7 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
|
||||
int i;
|
||||
int j;
|
||||
u32 count, event_type;
|
||||
const u8 zero_digest[sizeof(event_header->digest)] = {0};
|
||||
|
||||
marker = event;
|
||||
marker_start = marker;
|
||||
@@ -198,10 +201,19 @@ static inline int __calc_tpm2_event_size(struct tcg_pcr_event2_head *event,
|
||||
count = READ_ONCE(event->count);
|
||||
event_type = READ_ONCE(event->event_type);
|
||||
|
||||
/* Verify that it's the log header */
|
||||
if (event_header->pcr_idx != 0 ||
|
||||
event_header->event_type != NO_ACTION ||
|
||||
memcmp(event_header->digest, zero_digest, sizeof(zero_digest))) {
|
||||
size = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
efispecid = (struct tcg_efi_specid_event_head *)event_header->event;
|
||||
|
||||
/* Check if event is malformed. */
|
||||
if (count > efispecid->num_algs) {
|
||||
if (memcmp(efispecid->signature, TCG_SPECID_SIG,
|
||||
sizeof(TCG_SPECID_SIG)) || count > efispecid->num_algs) {
|
||||
size = 0;
|
||||
goto out;
|
||||
}
|
||||
|
Reference in New Issue
Block a user