Commit Graph
731 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek 97c373c7de Merge pull request #21065 from keszybz/efi-warnings
Clean up unused variables in efi code
2021-10-21 08:33:08 +02:00
Dimitri Papadopoulos ba669952b2 Typos found by codespell 2021-10-20 22:20:18 +09:00
Zbigniew Jędrzejewski-Szmek 2fffe2ed19 efi: check input parameter
clang complained about an unused variable. We cast the buffer to
struct boot_params, so let's check that it's at least this long.
2021-10-20 14:20:44 +02:00
Zbigniew Jędrzejewski-Szmek f3611cfb0b efi: drop two unused variables
It seems the code was added in 2553a5482c and
those two were never used for anything.
2021-10-20 13:58:03 +02:00
Jan Janssen a36a0d1540 macro: Move ALIGN_TO to macro-fundamental.h and introduce CONST_ALIGN_TO 2021-10-17 11:56:05 +02:00
Jan Janssen 53f69d671c sd-boot: Require gnu-efi 3.0.5
This version is from 2017 and should be stale enough to not cause
an outrage. All the relevant distros have it or a newer version.

We also already depend on some symbols defined in 3.0.5 anyway,
so let's take the opportunity to reduce our missing_efi.h
baggage.
2021-10-17 11:56:05 +02:00
Jan Janssen 12f32748aa sd-boot: Get rid of uefi_call_wrapper
The uefi_call_wrapper exists to convert to the right calling convention
and presumably predates compilers that can do so natively. The only
architecture where this is even needed is x86_64.
But because we are building with GNU_EFI_USE_MS_ABI defined, the
EFIAPI macro tells the compiler to use the right calling convention
for EFI functions. Our shim callback (which is called by EFI itself)
already relies on this.

This also adds a safety check to make se we are compiling with
GNU_EFI_USE_MS_ABI defined and also adds it to the compiler args
unconditionally. It is only used with x86_64 anyways, so it should
be fine to do so. EFI_FUNCTION_WRAPPER is unused in gnu-efi, so
it is dropped.
2021-10-17 11:55:57 +02:00
Jan Janssen 70cd15e97b sd-boot: Convert VOID -> void
We are already using void in several places and having a screaming
typedef for void feels pointless. There are also CONST, IN, OUT
and OPTIONAL which we aren't using either.

This leaves missing_efi.h to keep it in line with how they are
defined in gnu-efi and/or the specs.
2021-10-17 11:54:17 +02:00
Jan Janssen f69434002c sd-boot: Rework print_status()
A little helper function and some unusual formatting makes this
whole thing a lot easier on the eyes. Also, right-aligning the
properties for better readability at runtime.
2021-10-17 11:52:36 +02:00
Jan Janssen 6ae9a5a0bb sd-boot: Rearm the watchdog in console_key_read
Let's not disable the watchdog at all and instead rearm it inside
of console_key_read(). This way, we are covered by the watchdog everywhere.
2021-10-17 11:52:36 +02:00
Jan Janssen 9f04812331 sd-boot: Check for OOM in some places 2021-10-17 11:52:36 +02:00
Max Resch 33bc9b756e [sd-stub] add support for embedding devicetree 2021-10-15 21:47:42 +02:00
Lennart Poettering 0a51337df1 Merge pull request #20983 from mxre/feature/aarch64
[sd-stub] Add support for aarch64 booting via pe-entry point
2021-10-15 10:26:10 +02:00
Lennart Poettering 2f82562bad alloc-util: add strdupa_safe() + strndupa_safe() and use it everywhere
Let's define two helpers strdupa_safe() + strndupa_safe() which do the
same as their non-safe counterparts, except that they abort if called
with allocations larger than ALLOCA_MAX.

This should ensure that all our alloca() based allocations are subject
to this limit.

afaics glibc offers three alloca() based APIs: alloca() itself,
strndupa() + strdupa(). With this we have now replacements for all of
them, that take the limit into account.
2021-10-14 15:57:52 +02:00
Max Resch dc46792831 [sd-stub] Add support for aarch64 booting via pe-entry point 2021-10-13 18:20:32 +02:00
Jan Janssen a69702c5ea sd-boot: Move security and console control protocol to missing_efi.h
This also fixes a broken #ifdefs in the header itself.
2021-10-12 09:56:54 +02:00
Jan Janssen 4ec9d873f3 sd-boot: Use _cleanup_ in more places 2021-10-12 09:56:23 +02:00
Jan Janssen 19dd3995aa sd-boot: Remove unnecessary TPM conditionalization
This is already done in measure.h.
2021-10-12 09:56:02 +02:00
Jan Janssen d09065f894 sd-boot: Use backup LBA location from first GPT header
If a disk were dd'd to a lager block device, the last block on it
is not necessarily the backup header.
2021-10-12 09:55:49 +02:00
Jan Janssen 393955fd21 sd-boot: Split up xbootldr_open() 2021-10-12 09:55:21 +02:00
Jan Janssen 423523e063 sd-boot: Fix xbootldr detection
The broken crc32 calculation was a copy pasta error introduced in
87167331c9 and luckily has never been
shipped yet.
2021-10-12 09:54:04 +02:00
Jan Janssen bcbc3e81d3 sd-boot: Move xbootldr code into its own file 2021-10-12 09:53:48 +02:00
Jan Janssen 6e7bb7d3ee sd-boot: Invert if in disk_get_part_uuid() 2021-10-12 09:53:16 +02:00
Lennart Poettering 5c791053e3 Merge pull request #20776 from medhefgo/boot-timeout
sd-boot: Allow disabling timeout
2021-10-11 23:05:37 +02:00
Yu Watanabe f533135c6c Merge pull request #20981 from poettering/glibc-less-internal
various clean-ups: use less glibc internal symbols, modernize some other stuff
2021-10-12 02:10:49 +09:00
Max Resch a6089431d5 sd-stub: Provide initrd with LINUX_EFI_INITRD_MEDIA_GUID
Register a LINUX_EFI_INITRD_MEDIA_GUID DevicePath with a LoadFile2Protocol interface and serve the initrd to a supported Linux kernel (Version 5.8+)
Leave the x86 code for older kernels in place until supported kernels become more mainstream
2021-10-11 14:40:49 +02:00
Lennart Poettering 2ccd598635 stub: also move magic string in stub into .sdmagic PE section
We already did that for sd-boot, hence do it for sd-stub the same way.

Also, move the __attribute__ stuff to the beginning of the statement,
rather than the middle. Mostly just because we usually put it first for
implementations for identifiers (for prototypes we put it last).
2021-10-11 14:09:28 +02:00
Jan Janssen 39ddc32a86 bootctl: Add set-timeout verb
Fixes: #18766
2021-10-08 15:32:50 +02:00
Jan Janssen 52b6b35643 sd-boot: Allow disabling timeout 2021-10-08 15:26:55 +02:00
Luca Boccassi 6eb736727a boot/sha256: sd-ify and move to src/fundamental 2021-10-08 13:11:00 +01:00
Lennart Poettering edcd27dcaf tree-wide: remove a few unnecessary inclusions of ftw.h 2021-10-07 11:58:26 +02:00
Lennart Poettering d8e32c471f basic: split out glyph/emoji related calls from locale-util.[ch] into glyph-util.[ch]
These functions are used pretty much independently of locale, i.e. the
only info relevant is whether th locale is UTF-8 or not. Hence let's
give this its own pair of .c/.h files.
2021-10-05 16:14:37 +02:00
Lennart Poettering bf819d3ac2 basic: split out sync() family of calls from fs-util.[ch] into new c/h file
No changes in code, just some splitting out.
2021-10-05 15:47:32 +02:00
Lennart Poettering 8e8415e0d5 boot: prefer IMAGE_VERSION from os-release as version string
If the field exists it's probably the best version we have for sorting,
since it will change on every single OS image update.
2021-09-23 17:48:26 +02:00
Lennart Poettering 3a6249127e boot: add get_os_indications_supported() helper
We inquire the EFI var for this at two places, let's add a helper that
queries it and gracefully handles it if we can't get it, by returning a
zero mask, i.e. no features supported.
2021-09-23 17:24:28 +02:00
Lennart Poettering 0d43ce5266 stub: various modernizations to linux.c
Let's make some stuff const. Most importanly call AllocatePages() with
a pointer to an EFI_PHYSICAL_ADDRESS instead of a pointer to a
pointer. On 64bit this makes no difference, but on i386 this is simply
not correct, since EFI_PHYSICAL_ADDRESS is 64bit there, even though
pointers are 32bit.
2021-09-23 17:24:28 +02:00
Lennart Poettering a0a644be70 boot: add helper for converting EFI_PHYSICAL_ADDRESS to a pointer
This isn't trivial when trying to be compatible with 32bit archs, hence
add a set of helper macro-like functions that make the conversion safe.
2021-09-23 17:24:28 +02:00
Lennart Poettering 61b6249552 boot: move TPM conditionalization into measure.h header
Let's move conditionalization of tpm_log_load_options() into the
measure.h to encapsulate the ifdeffery a bit more.
2021-09-23 17:24:10 +02:00
Lennart Poettering ef6ff81a53 boot: port more code over to get_file_info_harder() 2021-09-23 17:24:10 +02:00
Lennart Poettering 19c896e99c boot: port more code to readdir_harder() 2021-09-23 17:24:10 +02:00
Lennart Poettering 4cbecde937 boot: use _cleanup_freepool_ at more places 2021-09-23 17:24:10 +02:00
Lennart Poettering 77c015820c boot: port more code to use open_directory() helper 2021-09-23 17:24:10 +02:00
Lennart Poettering 2553a5482c boot: automatically load drop-in EFI drivers off the ESP
Fixes: #15617
2021-09-23 17:24:10 +02:00
Lennart Poettering d72f81be74 boot: split out code that loads the various menu entries into helper call
Just some refactoring, no real code changes.
2021-09-23 17:24:10 +02:00
Lennart Poettering 0be2a06ac7 boot: split out code that sets various EFI vars from main()
Just some refactoring, no actual code changes.
2021-09-23 17:24:10 +02:00
Lennart Poettering 6e161dc860 stub: make splash image payload const 2021-09-23 17:24:10 +02:00
Lennart Poettering 94b81afb08 stub: show splash screen earlier
let's move showing of the splash screen to the earliest place we know
the splash bmp address. After all a splash screen is all about showing
as early as we can. This matters as doing TPM stuff or packing up a
large cpio might take time.

While we are at it, move the conditionalization of the splash screen
into the function instead of doing it ahead of calling it. This should
encapsulate things more nicely.
2021-09-23 17:24:10 +02:00
Lennart Poettering 5a186322a1 stub: split out code that sets the various efi vars into function of its own
Just some refactoring, no code changes beyond the splitting out.
2021-09-23 17:24:09 +02:00
Lennart Poettering e6e24af507 boot: unify code that measures image options/kernel command line 2021-09-23 17:24:09 +02:00
Lennart Poettering faacf1807e boot: stop making TPM PCR to measure kernel command line into configurable
Everyone appears to use PCR 8 for this, hence I think it's safe to
hardcode that in systemd too.

It's also documented, like here:

https://www.gnu.org/software/grub/manual/grub/html_node/Measured-Boot.html

or here:

https://github.com/rhboot/shim/blob/main/README.tpm

(And the previous name was a bit confusing, since we don't actually just
measure one thing anymore, but mutliple things into multiple PCRs...)
2021-09-23 17:24:09 +02:00