From: Zbigniew Jędrzejewski-Szmek Date: Wed, 30 Oct 2024 14:30:53 +0000 (+0100) Subject: boot: stop appending NUL to .sdmagic and .sbat sections X-Git-Tag: v257-rc1~72^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F34950%2Fhead;p=thirdparty%2Fsystemd.git boot: stop appending NUL to .sdmagic and .sbat sections Those text sections had a trailing NUL byte. It's debatable whether this is a good idea or not. Correctly written consumers will look at the section size so they wouldn't need this. Shim doesn't use a trailing NUL, so let's follow suit. Fixes https://github.com/systemd/systemd/issues/33731. 898e9edc469f87fdb6018128bac29eef0a5fe698 reworked this code, but didn't actually change the logic. We have always been appending the trailing zero by using a NUL-terminated string as the section contents. (I checked this with v253.18 from before the elf2efi rework.) .sdmagic contains a string like "#### LoaderInfo: systemd-boot 257~devel ####", which changes with each version, so previous versions would compare unequal anyway, so we don't need to worry about backwards compatibility. --- diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index a8c7b6881fc..87b0232860f 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -1926,14 +1926,14 @@ static bool is_sd_boot(EFI_FILE *root_dir, const char16_t *loader_path) { /* profile= */ UINT_MAX, /* validate_base= */ 0, &vector); - if (vector.memory_size != sizeof(SD_MAGIC)) + if (vector.memory_size != STRLEN(SD_MAGIC)) return false; err = file_handle_read(handle, vector.file_offset, vector.file_size, &content, &read); if (err != EFI_SUCCESS || vector.file_size != read) return false; - return memcmp(content, SD_MAGIC, sizeof(SD_MAGIC)) == 0; + return memcmp(content, SD_MAGIC, STRLEN(SD_MAGIC)) == 0; } static BootEntry* config_add_entry_loader_auto( diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h index 7e604b8283b..35758b5b189 100644 --- a/src/fundamental/macro-fundamental.h +++ b/src/fundamental/macro-fundamental.h @@ -542,7 +542,6 @@ static inline uint64_t ALIGN_OFFSET_U64(uint64_t l, uint64_t ali) { #define DECLARE_NOALLOC_SECTION(name, text) \ asm(".pushsection " name ",\"S\"\n\t" \ ".ascii " STRINGIFY(text) "\n\t" \ - ".zero 1\n\t" \ ".popsection\n") #ifdef SBAT_DISTRO