Commit Graph
61027 Commits
Author SHA1 Message Date
Lennart Poettering 6337be0a4e pcrphase: add $SYSTEMD_PCRPHASE_STUB_VERIFY env var for overriding stub check 2022-11-17 07:44:11 +09:00
Vitaly Kuznetsov 155c51293d shared/tpm2-util: Fix "Error: Esys invalid ESAPI handle (40000001)" warning
systemd-cryptenroll complains (but succeeds!) upon binding to a signed PCR
policy:

$ systemd-cryptenroll --unlock-key-file=/tmp/passphrase --tpm2-device=auto
  --tpm2-public-key=... --tpm2-signature=..." /tmp/tmp.img

ERROR:esys:src/tss2-esys/esys_iutil.c:394:iesys_handle_to_tpm_handle() Error: Esys invalid ESAPI handle (40000001).
WARNING:esys:src/tss2-esys/esys_iutil.c:415:iesys_is_platform_handle() Convert handle from TPM2_RH to ESYS_TR, got: 0x40000001
ERROR:esys:src/tss2-esys/esys_iutil.c:394:iesys_handle_to_tpm_handle() Error: Esys invalid ESAPI handle (40000001).
WARNING:esys:src/tss2-esys/esys_iutil.c:415:iesys_is_platform_handle() Convert handle from TPM2_RH to ESYS_TR, got: 0x4000000
New TPM2 token enrolled as key slot 1.

The problem seems to be that Esys_LoadExternal() function from tpm2-tss
expects a 'ESYS_TR_RH*' constant specifying the requested hierarchy and not
a 'TPM2_RH_*' one (see Esys_LoadExternal() -> Esys_LoadExternal_Async() ->
iesys_handle_to_tpm_handle() call chain).

It all works because Esys_LoadExternal_Async() falls back to using the
supplied values when iesys_handle_to_tpm_handle() fails:

    r = iesys_handle_to_tpm_handle(hierarchy, &tpm_hierarchy);
    if (r != TSS2_RC_SUCCESS) {
        ...
        tpm_hierarchy = hierarchy;
    }

Note, TPM2_RH_OWNER was used on purpose to support older tpm2-tss versions
(pre https://github.com/tpm2-software/tpm2-tss/pull/1531), use meson magic
to preserve compatibility.

Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
2022-11-16 21:45:57 +01:00
Lennart Poettering c204cfb2e8 Merge pull request #25399 from DaanDeMeyer/siginfo-crash
crash-handler: Make sure we propagate the original siginfo
2022-11-16 18:42:07 +01:00
Daan De Meyer ffa8d1ba39 Merge pull request #25096 from DaanDeMeyer/journald-log-fixes
journal: Ratelimit more journald log messages
2022-11-16 16:40:00 +01:00
Daan De Meyer 2af3e23fc0 crash-handler: Make sure we propagate the original siginfo
If we call raise(), we lose the information from the original signal.
If we use rt_sigqueueinfo(), the original siginfo gets reused which
is helpful when debugging crashes.
2022-11-16 16:07:35 +01:00
Daan De Meyer a0f95434c0 sigbus: Add fallback in case rt_tgsiqqueueinfo() fails 2022-11-16 16:07:31 +01:00
Daan De Meyer aa6aa81c1e mkfs-util: Add support for rootless xfs population
We use mkfs.xfs's protofile (-p) support to achieve this. The
protofile is a description of the files that should be copied into
the filesystem. The format is described in the manpage of mkfs.xfs.
2022-11-16 15:38:17 +01:00
Luca Boccassi 39a306ba34 Merge pull request #25319 from zx2c4-forks/krngseed
boot: implement kernel EFI RNG seed protocol with proper hashing
2022-11-16 15:07:54 +01:00
Daan De Meyer ee69f2b414 sigbus: Make sure the signal is delivered to the same thread 2022-11-16 15:07:23 +01:00
Daan De Meyer a54219532d missing_syscall: Add rt_tgsigqueueinfo() 2022-11-16 15:03:41 +01:00
Lennart Poettering 1282fec93f Merge pull request #25310 from jlinton/fpdt_dev_mem_alt
acpi-fpdt: Use kernel fpdt parsing
2022-11-16 14:55:17 +01:00
Lennart Poettering 45e99be3fb Merge pull request #24855 from kraxel/qemu
better qemu support (handle direct kernel boot etc).
2022-11-16 14:53:42 +01:00
Lennart Poettering 155519f4a3 Merge pull request #25393 from poettering/tpm2-override
tpm2-util: force default TCTI to be "device" with parameter "/dev/tpm…
2022-11-16 14:30:26 +01:00
Gerd Hoffmann 941d418d19 systemd-boot man page: add section for virtual machines 2022-11-16 12:52:58 +01:00
Gerd Hoffmann 8fec4f95be boot: improve support for qemu
systemd-boot expects being loaded from ESP and is quite unhappy in case
the loaded image device path is something else.  When running on qemu
this can easily happen though.  Case one is direct kernel boot, i.e.
loading via 'qemu -kernel systemd-bootx64.efi'.  Case two is sd-boot
being added to the ovmf firmware image and being loaded from there.

This patch detects both cases and goes inspect all file systems known to
the firmware, trying to find the ESP.  When present the
VMMBootOrderNNNN variables are used to inspect the file systems in the
given order.
2022-11-16 12:52:58 +01:00
Zbigniew Jędrzejewski-Szmek b8d6b1608e Merge pull request #24555 from medhefgo/bootctl
bootctl: Small improvements
2022-11-16 12:27:30 +01:00
Lennart Poettering f038576943 localectl,analyze: some minor vertical table rework fixes
Follow-up for #25339
2022-11-16 11:39:32 +01:00
Daan De Meyer a423050e28 log: Disable log rate limiting if debug logging is enabled
When debugging, it makes sense to not do any rate limiting at all.
2022-11-16 11:37:14 +01:00
Daan De Meyer bb8b8875f4 Merge pull request #24944 from DaanDeMeyer/repart-rootless
repart: Add support for running without root privileges
2022-11-16 09:09:06 +01:00
Daan De Meyer 1db6dbb1dc Revert "journal: Make sd_journal_previous/next() return 0 at HEAD/TAIL"
This commit broke backwards compatibility so let's revert it until
we find a better solution.

This reverts commit 977ad21b5b.
2022-11-16 00:20:54 +01:00
Marcus Schäfer 883e7cbfc0 Fix reading /etc/machine-id in kernel-install (#25388)
* Fix reading /etc/machine-id in kernel-install

The kernel-install script has code to read the contents of
/etc/machine-id into the MACHINE_ID variable. Depending
on the variable content kernel-install either logs the
value or creates a new machine id via 'systemd-id128 new'.
In that logic there is one issue. If the file /etc/machine-id
exists but is empty, the script tries to call read on an
empty file which return with an exit code != 0. As the
script code also uses 'set -e', kernel-install will exit at
this point which is unexpected.

The condition of an empty /etc/machine-id file exists for
example when building OS images, which should initialize the
system id on first boot but not staticly inside of the image.
afaik an empty /etc/machine-id is also a common approach
to make systemd indicate that it should create a new system
id. Because of this, the commit makes sure the reading of
/etc/machine-id does not fail in any case such that the
handling of the MACHINE_ID variable takes place.
2022-11-15 23:17:19 +00:00
angus-p 847dd8927b Update hostnamectl.xml
set-hostname is obsolete
2022-11-16 00:12:16 +01:00
Lennart Poettering 50a085143f tpm2: add some extra validation of device string before using it
Let's add some extra validation before constructing and using the .so
name to load. This isn't really security sensitive, given that we
used secure_getenv() to get the device string (and it thus should have
been come from a trusted source) but let's better be safe than sorry.
2022-11-15 23:14:54 +01:00
Lennart Poettering 34906680af tpm2-util: force default TCTI to be "device" with parameter "/dev/tpmrm0"
Apparently some distros default to tss-abmrd. Let's bypass that and
always go to the kernel resource manager.

abmrd cannot really work for us, since we want to access the TPM already
in earliest boot i.e. in environments the abmrd service is not available
in.

Fixes: #25352
2022-11-15 23:14:13 +01:00
Pasha Vorobyev d7fe0a6723 MemoryZSwapMax directive to configure new memory.zswap.max cgroup file 2022-11-15 21:15:37 +01:00
Daan De Meyer e2d057456d repart: Run most repart integration tests without root privileges
To make sure rootless mode keeps working, let's run all repart
integration tests that we can without root privileges. The only ones
we need to keep running with root privileges are the tests that operate
on a block/loop device and those that use --image=.
2022-11-15 20:23:51 +01:00
Daan De Meyer a64769d605 repart: Don't use loop devices when we're not operating on a block device
When repart is not operating on a block device, if we avoid using
any loop devices at all, it becomes possible to run repart without
needing root privileges.

Note that this also depends on the filesystems in use to support
population without needing root privileges (specifically, squashfs,
ext4 or btrfs).
2022-11-15 20:23:51 +01:00
Daan De Meyer 0b34f351d1 repart: Change mode of temporary root to 755
Let's make sure regular users can access read/execute files when
we're populating from a temporary root.
2022-11-15 20:23:51 +01:00
Daan De Meyer 0eb23798d5 repart: Fail early if no sources are provided for a read-only filesystem 2022-11-15 20:23:51 +01:00
Daan De Meyer 2a99f964ff repart: Skip partition_populate_directory() if no sources are provided 2022-11-15 20:23:51 +01:00
Daan De Meyer 6d6cefad37 repart: Fail early if we're missing privileges to populate a filesystem 2022-11-15 20:23:51 +01:00
Daan De Meyer e59678b2cf repart: Ensure files end up owned by root in generated filesystems
By forking off a user namespace before running mkfs and ID mapping
the user running repart to root in the user namespace, we can make
sure that files in the generated filesystems are all owned by root
instead of the user running repart.

To make this work we have to make sure that all the files in the
root directory that's passed to the mkfs binary are owned by the
user running repart, so we have to drop the shortcut for only a
single root directory in partition_populate_directory().
2022-11-15 20:23:51 +01:00
Daan De Meyer cf2ed23cd2 repart: Fix copy failure error message 2022-11-15 20:23:51 +01:00
Daan De Meyer 4ecd39c511 repart: Move verity sig formatting into data partition functions
Refactoring to make implementing rootless repart easier.
2022-11-15 20:23:47 +01:00
Daan De Meyer 2b392d860e repart: Move verity hash formatting into data partition functions
Refactoring to make implementing rootless repart easier.
2022-11-15 20:23:28 +01:00
Daan De Meyer 48a09a8fff repart: Do offline encryption instead of online
Offline encryption can be done without mounting the luks device. For
now we still use loop devices to split out the partition we want to
write to but in a later commit we'll replace this with a regular file.

For offline encryption, we need to keep 2x the luks header size space
free at the end of the partition, so this means our encrypted partitions
will be 16M larger than before.
2022-11-15 20:07:54 +01:00
Daan De Meyer 98e0456ec0 repart: Let libcryptsetup calculate the volume key
We also bump the volume key size to 512 bits.
2022-11-15 20:07:54 +01:00
Daan De Meyer bf3598beff mkfs-util: Add support to populate vfat without mounting using mcopy
mkfs.vfat doesn't support specifying a root directory to bootstrap
the filesystem from (see https://github.com/dosfstools/dosfstools/issues/183).
Instead, we can use the mcopy tool from the mtools package to copy
files into the vfat filesystem after creating it without needing to
mount the vfat filesystem.
2022-11-15 20:07:54 +01:00
Daan De Meyer 68665704dc mkosi: Add mkfs tools to mkosi image
Useful for testing systemd-repart
2022-11-15 20:07:54 +01:00
Daan De Meyer 59e2be46cc mkfs-util: Add root support for ext and btrfs
For these filesysrems, it's useful to provide the filesystem upfront
so that we don't have to mount it later which requires root privileges.
2022-11-15 20:07:54 +01:00
Daan De Meyer ddf615a11c mkfs-util: Make argument handling for mkfs binaries more flexible
Preparation for the next commit.
2022-11-15 20:07:54 +01:00
Daan De Meyer c93b0efdb9 btrfs-util: Remove bogus assert()
If size is zero, BTRFS_IOC_CLONE_RANGE will copy until the end of
the source file.
2022-11-15 20:07:54 +01:00
Daan De Meyer 2b0cff0469 Merge pull request #25001 from DaanDeMeyer/repart-filter
repart: Add --include/--exclude-partitions
2022-11-15 20:07:24 +01:00
Daan De Meyer 56bb434e9b repart: Add integration test for --include/--exclude-partitions 2022-11-15 13:45:28 +01:00
Daan De Meyer 81d1098bc1 repart: Add --include/--exclude-partitions
Let's allow filtering the partitions to operate on by partition
type UUID. This is necessary when building bootable images with a
verity protected root/usr partition as we can only build the UKI
image when we have the verity roothash which means we cannot populate
the EFI partition yet when we run repart initially to determine the
verity roothash.
2022-11-15 13:45:25 +01:00
Daan De Meyer 00428745e3 repart: Use first unused partition number for new partitions
If we skip some partition types in a first run of systemd-repart,
we don't want their partition numbers to be different than usual,
so let's change the allocation of partition numbers to account for
that.
2022-11-15 13:27:59 +01:00
Daan De Meyer 22e932f4d1 gpt: Expose GptPartitionType and get rid of SECONDARY/OTHER
Instead of exposing just the partition type UUID, let's expose the
GptPartitionType struct, which has a lot more information available
in a much more accessible way.

Also, let's get rid of SECONDARY/OTHER in PartitionDesignator. These
were only there to support preferred architectures in dissect-image.c,
but we can easily handle that by comparing architectures when we decide
whether to override a partition. This is done in a new function
compare_arch().
2022-11-15 13:27:15 +01:00
Li kunyu bef69ae878 repart: Remove the repeated ';' from code (#25386) 2022-11-15 17:02:51 +09:00
Daan De Meyer 32a3f802f6 Merge pull request #24908 from DaanDeMeyer/repart-minimize
repart: Add Minimize setting
2022-11-15 08:19:28 +01:00
Jeremy Linton bc09c2d865 acpi-fpdt: Use kernel fpdt parsing
On some kernels/distros (RHEL/aarch64) /dev/mem is
turned off. This means that the ACPI FPDT data is
missing from systemd-analyze output when /dev/mem
fails to provide the boot times.

Instead recent kernels can export that data from
/sys/firmware/acpi/fpdt/boot/ entries. Use that
information if available first.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
2022-11-14 20:07:57 -06:00