Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

efi: Make rng_seed table handling local to efi.c

Move the rng_seed table address from struct efi into a static global
variable in efi.c, which is the only place we ever refer to it anyway.
This reduces the footprint of struct efi, which is a r/w data structure
that is shared with the world.

Tested-by: Tony Luck <tony.luck@intel.com> # arch/ia64
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>

+10 -12
+10 -11
drivers/firmware/efi/efi.c
··· 44 44 .config_table = EFI_INVALID_TABLE_ADDR, 45 45 .esrt = EFI_INVALID_TABLE_ADDR, 46 46 .mem_attr_table = EFI_INVALID_TABLE_ADDR, 47 - .rng_seed = EFI_INVALID_TABLE_ADDR, 48 47 .tpm_log = EFI_INVALID_TABLE_ADDR, 49 48 .tpm_final_log = EFI_INVALID_TABLE_ADDR, 50 49 .mem_reserve = EFI_INVALID_TABLE_ADDR, 51 50 }; 52 51 EXPORT_SYMBOL(efi); 52 + 53 + static unsigned long __ro_after_init rng_seed = EFI_INVALID_TABLE_ADDR; 53 54 54 55 struct mm_struct efi_mm = { 55 56 .mm_rb = RB_ROOT, ··· 468 467 {SMBIOS3_TABLE_GUID, "SMBIOS 3.0", &efi.smbios3}, 469 468 {EFI_SYSTEM_RESOURCE_TABLE_GUID, "ESRT", &efi.esrt}, 470 469 {EFI_MEMORY_ATTRIBUTES_TABLE_GUID, "MEMATTR", &efi.mem_attr_table}, 471 - {LINUX_EFI_RANDOM_SEED_TABLE_GUID, "RNG", &efi.rng_seed}, 470 + {LINUX_EFI_RANDOM_SEED_TABLE_GUID, "RNG", &rng_seed}, 472 471 {LINUX_EFI_TPM_EVENT_LOG_GUID, "TPMEventLog", &efi.tpm_log}, 473 472 {LINUX_EFI_TPM_FINAL_LOG_GUID, "TPMFinalLog", &efi.tpm_final_log}, 474 473 {LINUX_EFI_MEMRESERVE_TABLE_GUID, "MEMRESERVE", &efi.mem_reserve}, ··· 536 535 pr_cont("\n"); 537 536 set_bit(EFI_CONFIG_TABLES, &efi.flags); 538 537 539 - if (efi.rng_seed != EFI_INVALID_TABLE_ADDR) { 538 + if (rng_seed != EFI_INVALID_TABLE_ADDR) { 540 539 struct linux_efi_random_seed *seed; 541 540 u32 size = 0; 542 541 543 - seed = early_memremap(efi.rng_seed, sizeof(*seed)); 542 + seed = early_memremap(rng_seed, sizeof(*seed)); 544 543 if (seed != NULL) { 545 544 size = seed->size; 546 545 early_memunmap(seed, sizeof(*seed)); ··· 548 547 pr_err("Could not map UEFI random seed!\n"); 549 548 } 550 549 if (size > 0) { 551 - seed = early_memremap(efi.rng_seed, 552 - sizeof(*seed) + size); 550 + seed = early_memremap(rng_seed, sizeof(*seed) + size); 553 551 if (seed != NULL) { 554 552 pr_notice("seeding entropy pool\n"); 555 553 add_bootloader_randomness(seed->bits, seed->size); ··· 1048 1048 if (!kexec_in_progress) 1049 1049 return NOTIFY_DONE; 1050 1050 1051 - seed = memremap(efi.rng_seed, sizeof(*seed), MEMREMAP_WB); 1051 + seed = memremap(rng_seed, sizeof(*seed), MEMREMAP_WB); 1052 1052 if (seed != NULL) { 1053 1053 size = min(seed->size, EFI_RANDOM_SEED_SIZE); 1054 1054 memunmap(seed); ··· 1056 1056 pr_err("Could not map UEFI random seed!\n"); 1057 1057 } 1058 1058 if (size > 0) { 1059 - seed = memremap(efi.rng_seed, sizeof(*seed) + size, 1060 - MEMREMAP_WB); 1059 + seed = memremap(rng_seed, sizeof(*seed) + size, MEMREMAP_WB); 1061 1060 if (seed != NULL) { 1062 1061 seed->size = size; 1063 1062 get_random_bytes(seed->bits, seed->size); ··· 1072 1073 .notifier_call = update_efi_random_seed, 1073 1074 }; 1074 1075 1075 - static int register_update_efi_random_seed(void) 1076 + static int __init register_update_efi_random_seed(void) 1076 1077 { 1077 - if (efi.rng_seed == EFI_INVALID_TABLE_ADDR) 1078 + if (rng_seed == EFI_INVALID_TABLE_ADDR) 1078 1079 return 0; 1079 1080 return register_reboot_notifier(&efi_random_seed_nb); 1080 1081 }
-1
include/linux/efi.h
··· 540 540 unsigned long config_table; /* config tables */ 541 541 unsigned long esrt; /* ESRT table */ 542 542 unsigned long mem_attr_table; /* memory attributes table */ 543 - unsigned long rng_seed; /* UEFI firmware random seed */ 544 543 unsigned long tpm_log; /* TPM2 Event Log table */ 545 544 unsigned long tpm_final_log; /* TPM2 Final Events Log table */ 546 545 unsigned long mem_reserve; /* Linux EFI memreserve table */