Commit Graph
1393 Commits
Author SHA1 Message Date
Jan Janssen 8f30a066ff bless-boot: Actually return successfully
$ journalctl -u systemd-bless-boot.service
systemd[1]: Starting Mark the Current Boot Loader Entry as Good...
systemd-bless-boot[536]: Marked boot as 'good'. (Boot attempt counter is at 2.)
systemd-bless-boot[536]: Can't find boot counter source file for '/loader/entries/arch.conf': Device or resource busy
systemd[1]: Finished Mark the Current Boot Loader Entry as Good.
2023-08-02 15:16:33 +02:00
Yu Watanabe bd31a348bf meson: move declarations of bootctl and friends
This also drops unnecessary dependency on libblkid from
systemd-boot-check-no-failures.
2023-08-01 02:31:36 +09:00
Luca Boccassi fcd71b62be Merge pull request #28595 from medhefgo/elf2efi-fixes
elf2efi: Fixes
2023-07-31 00:07:28 +01:00
Luca Boccassi 6c0ac118d2 Merge pull request #28567 from yuwata/meson-versiondep
meson:  cleanups for version dependency
2023-07-30 23:40:51 +01:00
Jan Janssen d0bbe32485 stub: Also reserve sections for EFI stub
The stub image may not have enough sections to cause enough PE header
space to be free for later expansion. Given that the stub is guaranteed
to be expanded we should always reserve enough sections for it.

This also bumps the reservation to 15. It doesn't add more space
compared to current builds but it more closely reflects the amount of
sections that a UKI could have in total if all optional sections are
used.

Fixes: #28593
2023-07-30 21:31:38 +02:00
Luca Boccassi 167338529b Merge pull request #28428 from ldv-alt/ERRNO_IS
treewide: cleanup use of ERRNO_IS_*(r)
2023-07-30 16:31:16 +01:00
Yu Watanabe 0c491d0f34 meson: use kwargs to declare efi binaries
No functional change, just refactoring.
2023-07-30 08:57:55 +09:00
Yu Watanabe 4122d68682 boot: always set SBAT_DISTRO_VERSION 2023-07-30 04:54:47 +09:00
Daan De Meyer 7ccb171c4c Merge pull request #28359 from keszybz/ret-gather
Add RET_GATHER macro to make continue-but-remember-first-error functions easier
2023-07-28 14:28:35 +02:00
Dmitry V. Levin 3dadc118aa bootctl: cleanup use of ERRNO_IS_NOT_SUPPORTED()
Given that ERRNO_IS_NOT_SUPPORTED() also matches positive values,
make sure this macro is not called with arguments that do not have
errno semantics.

In this case the argument passed to ERRNO_IS_NOT_SUPPORTED() is the
value returned by efi_loader_get_entries() which is not expected to
return any positive values, but let's be consistent anyway and move
the ERRNO_IS_NOT_SUPPORTED() invocation to the branch where
the return value is known to be negative.
2023-07-28 12:28:35 +00:00
Luca Boccassi 80256e8c54 Merge pull request #28527 from medhefgo/boot-stack-guard
boot: Fall back to using image load address for stack guard
2023-07-28 09:56:41 +01:00
Luca Boccassi 46021aaaa6 Merge pull request #28417 from bluca/coverity
Some coverity fixes
2023-07-28 09:56:08 +01:00
Luca Boccassi eff91e2f38 efi: link with -z nopack-relative-relocs
elf2efi.py cannot handle DT_RELR relocations, so disable it
if we can

Fixes https://github.com/systemd/systemd/issues/28520
2023-07-26 18:47:53 +01:00
Jan Janssen bc32a9fdfd boot: Fall back to using image load address for stack guard
If we cannot get random data from the RNG protocol we can still use our
load address to make the stack guard a little less static.
2023-07-26 15:11:08 +02:00
Zbigniew Jędrzejewski-Szmek 7e90814f0a Deprecate efivar SystemdOptions
As mentioned in the NEWS entry, it seems to see very little use, but adds
complexity in our code. It was added mainly with the goal of making it easier
for people using grub2 to modify their boot configuration, but grub2 is gaining
support for BLS snippets. On the systemd side, we now have credentials. So
let's deprecate this, and if there's no outcry, remove it in a few releases.
2023-07-18 17:30:06 +02:00
Luca Boccassi 8ecd67e18e efi: add assert to silence coverity
CID#1502668
2023-07-16 00:39:13 +01:00
Luca Boccassi d3634ac46b Merge pull request #28301 from berrange/cvm-lockdown
Avoid using SMBIOS for kernel cmdline injection in sd-stub in confidential VMs
2023-07-14 22:47:37 +01:00
Daniel P. Berrangé 4b1153cfcc efi: don't pull kernel cmdline from SMBIOS in a confidential VM
In a confidential VM, the SMBIOS data is not trusted, as it is under the
control of the host OS/admin and not covered by attestation of the machine.

Fixes: https://github.com/systemd/systemd/issues/27604
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2023-07-14 14:18:09 +01:00
Daniel P. Berrangé b354a2cafc efi: add helper API for detecting confidential virtualization
This helper is a simplified version of detect_confidential_virtualization()
that merely returns a boolean status flag reflecting whether we are believed
to be running inside a confidential VM.

This flag can be used for turning off features that are inappropriate to
use from a CVM, but must not be used for releasing sensitive data. The
latter must only be done in response to an attestation for the environment.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2023-07-14 14:18:09 +01:00
Zbigniew Jędrzejewski-Szmek 0114bab25f bootctl: use RET_GATHER, return first error 2023-07-13 11:12:00 +02:00
Zbigniew Jędrzejewski-Szmek 9ef648cca1 various: use RET_GATHER
No functional change indentended.
2023-07-13 11:12:00 +02:00
Jan Janssen 7ea44f1733 boot: Fix build for x32
When building on a x32 system we need to explicitly pass `-m64` to get
the right ABI as the kernel and EFI are still 64bit. For this to
actually work, a suitable multilib compiler, 32bit libc headers and
libgcc need to be installed (similar to ia32 builds on x86_64).
2023-07-10 11:09:28 +01:00
Lennart Poettering e987d54baf boot: make LoaderType enum less special
Usually (but not always) we use uppercase type naming, and do a typedef
for enums like this. Do so here too.
2023-07-05 17:54:59 +02:00
Lennart Poettering 3a59c55f67 boot: rename entry_count → n_entries
While we don't strictly follow the rule, most of our userspace names
these fields that count entries in some array n_xyz, hence let's do so
in the EFI boot code too, to make things less special.
2023-07-05 17:54:59 +02:00
Lennart Poettering 92bb46c464 efi: add a bunch of reported EFI loader/stub feature flags
We gained a bunch of new features that deserve reporting to userspace,
hence add matching flags for each.

This allows userspace to determine if installing addons in the ESP even
makes sense.

This is inspired by a similar changes in #28057
2023-07-05 17:54:59 +02:00
Lennart Poettering 3ed075cf61 generator: run various generators only run on the host, not in initrd
These 5 generators only make sense on the host,not in the initrd, hence
if they end up in the initrd anyway, make them exit quickly.
2023-07-04 23:15:36 +02:00
Lennart Poettering d5163f9c87 NEWS/--help: correct/be clearer on bootclt -R vs. -RR
The NEWS file was simply wrong. Let's also improve the --help text on
this.

Fixes: #28221
2023-07-04 12:50:22 +01:00
Zbigniew Jędrzejewski-Szmek da89046643 tree-wide: "<n>bit" → "<n>-bit"
In some places, "<n> bits" is used when more appropriate.
2023-07-02 11:10:12 +01:00
Luca Boccassi d5f91cf793 boot: measure .sbat section
We are now merging .sbat sections from sd-stub and kernel image, so
measure it in PCR11.
2023-06-30 17:17:56 +01:00
Mike Yuan 93d82cfcae bootctl: log correct error about device_path_make_canonical() 2023-06-23 23:57:49 +08:00
Jan Janssen 78fffdea37 boot: Improve device_path_to_str_internal()
The UEFI spec has a generic `Path` node representation that can be used
for device path nodes that are unknown. So we can use that instead of
giving up when we see a node other than FilePath.

This also simplifies the FilePath case by just using xasprintf(). The
code is really just a fallback for silly firmware that does not
implement EFI_DEVICE_PATH_TO_TEXT_PROTOCOL (looking at you, Apple).

The correctness of this was tested by round-tripping it through
EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL, which yielded an identical device
compared to our input path.
2023-06-18 11:13:09 +02:00
Jan Janssen e53e5c0ac1 boot: Split log_hexdump() 2023-06-18 11:13:03 +02:00
Jan Janssen f982500338 boot: Move custom device path string creating into its own function 2023-06-18 09:42:22 +02:00
Luca Boccassi 0302e38f7a Merge pull request #28036 from medhefgo/meson
meson: Minor improvements
2023-06-14 20:12:35 +01:00
Lennart Poettering c4ccb80e39 bootctl: warn if the ESP random seed is stored on a world-readable dir
This takes heavy inspiration from @zx2c4 (Jason A. Donenfeld)'s
PR #25531 but changes it considerably, but always going by fd instead of
paths, and only warning about the side file itself and the ESP mount
point, nothing else. This shuld be more than enough and should not be
brittle against concurrent path modifications.

Replaces: #25531
2023-06-14 18:00:24 +02:00
Jan Janssen 816df466a7 meson: Use build_tgt.name() 2023-06-14 16:10:55 +02:00
Lennart Poettering 2d0855154f bootctl: fix docs/--help to say that "bootctl random-seed" not just initializes but also refreshes ESP random seeds 2023-06-14 11:58:37 +01:00
Lennart Poettering 8dfd099b50 tree-wide: start properly syncing at various places we so far didn't
Let's better be safe than sorry, and install files fully safely now that
is is easy.
2023-06-13 09:50:10 +02:00
Lennart Poettering 27e18c23bc tmpfile-util: turn last parameter of link_tmpfile() into a proper flags
This changes a boolean param into a proper bitflag field.

Given this only defines a single flag for now this doesn't look like
much of an improvement. But we'll add another flag shortly, where it
starts to make more sense.
2023-06-13 09:40:53 +02:00
Jan Janssen b4eb2de7e3 boot: Unify protocol opening
We are using HandleProtocol everywhere except in these few cases. This
unifies on HandleProtocol as it is simpler to use and equivalent to
OpenProtocol.

The only difference between the two is that OpenProtocol attributes the
opened protocol to a firmware-owned handle instead of our image handle.
This has no real use for regular UEFI applications as any protocols
opened via BY_HANDLE or GET_PROTOCOL is not required to be closed. In
fact, when a protocol is uninstalled it will do nothing more than reduce
the open count for these.
2023-06-12 21:12:11 +01:00
Jan Janssen 7da9db535c boot: Fix memory leak 2023-06-08 20:41:16 +01:00
Dan Streetman 1dc8f51841 tpm2: replace _cleanup_tpm2_* macros with _cleanup_()
Remove _cleanup_tpm2_context_ and _cleanup_tpm2_handle_ macros, replacing their
use with _cleanup_(tpm2_context_unrefp) and _cleanup_(tpm2_handle_freep),
respectively.
2023-06-08 01:09:08 +02:00
Zbigniew Jędrzejewski-Szmek 320266b961 test_ukify: pass through path to addon stub
Without this, the tests would generally be skipped, since we haven't made a
release with the addon stub yet. But even if the file is there, we always want
to test the freshly-built item.
2023-06-06 15:45:57 +02:00
Zbigniew Jędrzejewski-Szmek fcc54d1dfe Merge pull request #27856 from arianvp/fix-bootctl-status
bootctl: Print version number of detected binaries again
2023-06-01 10:25:30 +02:00
Yu Watanabe 2485b7e2b8 tree-wide: use memstream-util 2023-06-01 06:48:47 +09:00
Daan De Meyer 7d52bf16e7 Merge pull request #27628 from ddstreet/tpm2_header_cleanup
Tpm2 header cleanup
2023-05-31 23:06:14 +02:00
Lennart Poettering 38c86ce329 Merge pull request #27861 from poettering/find-esp-tweaks
minor tweaks to find-esp.c
2023-05-31 15:42:05 +02:00
Dan Streetman 9944909e68 tpm: remove external calls to dlopen_tpm2()
The calls outside tpm2-util.c are redundant, as tpm2_context_new()
is always called immediately after, which then calls dlopen_tpm2().
2023-05-31 09:23:21 -04:00
Arian van Putten a680d4fb87 bootctl: also print efi files not owned by systemd in status
We should not skip over unknown entries in EFI/BOOT/ but
also print them out in status so people are aware that they are there.
2023-05-31 14:30:31 +02:00
Lennart Poettering 0b2aa2064f find-esp: change "unprivileged_mode" parameter to be tristate
Previously, unprivileged mode for find_esp_and_warn() and
find_xbootldr_and_warn() could be enabled or disabled. With this change
it can also be set to negative in which case the functions will enable
it automatically if found to be executing without privileges.

This just moves te geteuid() check we often do for the param inside of
the functions.

At the same time internally in the functions we also pass around the
VerifyESPFlags field across the various functions instead of booleans.

Both changes are just refactoring. No changes in behaviour.
2023-05-31 10:12:47 +02:00