When disassembling the EFI stub I noticed that GUIDs and efi_char16_t strings are not placed in rodata but generated on the stack at runtime. GUIDs occupy up to 80 bytes of text instead of just 16 bytes rodata which annoyed me enough to go down the rabbit hole of fixing it. This series constifies all GUIDs and EFI-related strings I could find. The most important patch is [10/10] to constify the EFI_GUID() macro. This has to be at the end of the series to avoid compiler warnings. Reviewers may want to read its commit message first as it contains background information. In particular it explains why this series only fixes the kernel side of things. Additional work is necessary on the compiler side to actually have all the GUIDs and strings in rodata. At the moment both gcc and clang achieve that only partially. Ard Biesheuvel expressed an interest in these patches in November but stressed the importance that arguments to EFI boot/runtime/protocol services may only be declared const if the spec marks them "IN": https://lkml.org/lkml/2016/11/21/459 Hence I've split the series by boot/runtime/protocol services to allow for easy verification of this fact. Constification of GetVariable() / SetVariable() is further split in one patch for the function signatures and another for the actual arguments because changing the function signatures is quite involved in this case. efi.git/next needs to be rebased on v4.10-rc1 before this series can be applied because it requires commits f6697df36bdf ("x86/efi: Prevent mixed mode boot corruption with CONFIG_VMAP_STACK=y") and 2fbadc3002c5 ("arm/arm64: xen: Move shared architecture headers to include/xen/arm"). Unfortunately I was not able to compile-test on ia64, there's no cross- compiler package available on Debian. :-( I did not receive complaints from 0-day, so I'm cautiously optimistic that I didn't cause breakage there. I've pushed the patches to GitHub to ease reviewing/fetching: https://github.com/l1k/linux/commits/efi_const_v1 Thanks, Lukas Ard Biesheuvel (1): efi: use typed function pointers for runtime services table Lukas Wunner (9): efi: Constify GetVariable() / SetVariable() signatures efi: Constify GetVariable() / SetVariable() arguments efi: Constify HandleProtocol() / LocateHandle() / LocateProtocol() efi: Constify InstallConfigurationTable() efi: Constify EFI_FILE_PROTOCOL.GetInfo() efi: Constify EFI_RNG_PROTOCOL.GetRNG() efi: Constify EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString() efi: Constify efi_guidcmp() arguments uuid: Constify UUID compound literals arch/ia64/kernel/efi.c | 24 ++++------ arch/x86/boot/compressed/eboot.c | 50 ++++++++++----------- arch/x86/include/asm/xen/interface.h | 1 + arch/x86/platform/efi/efi_64.c | 18 ++++---- arch/x86/platform/efi/quirks.c | 2 +- drivers/firmware/efi/efi-pstore.c | 10 ++--- drivers/firmware/efi/efibc.c | 3 +- drivers/firmware/efi/libstub/arm-stub.c | 17 +++---- drivers/firmware/efi/libstub/arm32-stub.c | 2 +- drivers/firmware/efi/libstub/efi-stub-helper.c | 7 ++- drivers/firmware/efi/libstub/efistub.h | 2 +- drivers/firmware/efi/libstub/fdt.c | 3 +- drivers/firmware/efi/libstub/gop.c | 12 +++-- drivers/firmware/efi/libstub/random.c | 16 +++---- drivers/firmware/efi/runtime-wrappers.c | 15 ++++--- drivers/firmware/google/gsmi.c | 10 ++--- drivers/infiniband/hw/hfi1/efivar.c | 6 +-- drivers/scsi/isci/probe_roms.c | 2 +- drivers/xen/efi.c | 12 ++--- include/linux/efi.h | 61 ++++++++++++++------------ include/uapi/linux/uuid.h | 4 +- include/xen/arm/interface.h | 1 + include/xen/interface/platform.h | 11 ++++- include/xen/xen-ops.h | 12 ++--- 24 files changed, 143 insertions(+), 158 deletions(-) -- 2.11.0 -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html