Commit Graph
54455 Commits
Author SHA1 Message Date
Lennart Poettering 28ba7e36d0 btrfs-util: expose COPY_SIGTERM for btrfs_snapshot() too 2021-08-02 17:24:23 +02:00
Lennart Poettering 1ac404cac0 copy: add COPY_SIGTERM, matching the existing COPY_SIGINT 2021-08-02 17:24:18 +02:00
Lennart Poettering 864e406256 copy: add COPY_SYNCFS flag
When copying large directory trees it should be a better idea to sync
the whole fs once when we are done instead of individually for each
file, hence add COPY_SYNCFS.

As opposed to COPY_FSYNC/COPY_FSYNC_FULL this only really applies to the
top-level directory, after completion of the whole copy.
2021-08-02 17:24:09 +02:00
Lennart Poettering 06a40b52d9 copy: optionally fsync() files after copying them
As a safety precaution it makes sense to fsync() files after copying
them, and maybe even the directories they are contained in. Let's add a
flag for these two cases.
2021-08-02 17:24:03 +02:00
Lennart Poettering 2f78204498 copy: tighten destination checks when copying files
let's make sure we only operate on regular files when copying files.

Also, make sure to copy file attributes only over if target is a regular
file (so that copying a file to /dev/null won't alter the access
mode/ownership of that device node...)
2021-08-02 17:23:58 +02:00
Lennart Poettering 5c9d961e79 copy: move to single clean-up path
(This might not look like a big improvement, but will shortly, when we
add fsync() support to the copy logic, at which point there are more
error paths we can unify that way.)

While we are at it, tweak a clean-up path: only unlink a copied file if
we are definitely the ones who created them, i.e. if O_EXCL is set.
2021-08-02 17:23:52 +02:00
David Tardon feac9a1d1b machined-varlink: fix double free
Fixes: #18599
2021-08-02 16:19:17 +01:00
David Seifert f8d54f7810 Use correct <fcntl.h> include
* `<sys/fcntl.h>` is not specified in POSIX
2021-08-02 14:51:50 +02:00
Lennart Poettering b98855d90b cryptsetup: unbreak CI build
PR #20176 broke building of the cryptsetup token logic. This wasn't
noticed before the PR was merged, because the only CIs new enough to be
able to build the token logic (the Fedora Rawhide ones) didn't actually
run at all on the PR.

Let's add the missing hookup for the TPM2 PCR bank logic also to the
token module, to make the CI pass again.
2021-08-01 10:43:36 +02:00
Sergei Trofimovich 1da3eef262 coredump/stacktrace.c: avoid crash on binaries without NHDR
Observed as a crash on binaries built with gcc-master:

```
 3  0x00005573b8841d6a in parse_package_metadata (name=name@entry=0x5573b901a620 "/a", id_json=0x0,
    elf=0x5573b9028730, c=c@entry=0x7fffc688f790) at ../systemd-stable-249.2/src/coredump/stacktrace.c:157
 4  0x00005573b884209e in module_callback (mod=0x7fffc688f6c0, userdata=<optimized out>,
    name=0x5573b901a620 "/a", start=<optimized out>, arg=0x7fffc688f790)
    at ../systemd-stable-249.2/src/coredump/stacktrace.c:306
 5  0x00007f56d60dcbd5 in dwfl_getmodules (dwfl=0x5573b901fda0,
    callback=callback@entry=0x5573b8841eb0 <module_callback>, arg=arg@entry=0x7fffc688f790, offset=offset@entry=0)
    at ../../elfutils-0.185/libdwfl/dwfl_getmodules.c:86
 6  0x00005573b884231b in parse_core (ret_package_metadata=0x7fffc688f848, ret=0x7fffc688f850,
    executable=0x7fffc688f790 "\200\332\001\271sU", fd=21) at ../systemd-stable-249.2/src/coredump/stacktrace.c:366
 7  coredump_parse_core (fd=fd@entry=6, executable=0x7fffc688f790 "\200\332\001\271sU", ret=ret@entry=0x7fffc688f850,
    ret_package_metadata=ret_package_metadata@entry=0x7fffc688f848)
    at ../systemd-stable-249.2/src/coredump/stacktrace.c:406
 8  0x00005573b883f897 in submit_coredump (context=context@entry=0x7fffc688fa10, iovw=iovw@entry=0x7fffc688f990,
    input_fd=input_fd@entry=5) at ../systemd-stable-249.2/src/coredump/coredump.c:827
 9  0x00005573b883d339 in process_socket (fd=3) at ../systemd-stable-249.2/src/coredump/coredump.c:1041
 10 run (argv=<optimized out>, argc=-964101648) at ../systemd-stable-249.2/src/coredump/coredump.c:1416
 11 main (argc=-964101648, argv=<optimized out>) at ../systemd-stable-249.2/src/coredump/coredump.c:1422
```

Happens only on enabled elfutils symbolizer.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2021-07-31 19:17:49 +01:00
Lennart Poettering e3709627e6 signal-util: fix typo
Noticed by @behrmann: https://github.com/systemd/systemd/pull/20156#discussion_r667451006
2021-07-30 21:55:47 +02:00
Lennart Poettering c37e0100d8 Merge pull request #20121 from poettering/bootctl-auto
units: run "bootctl update" automatically after boot, to ensure boot loader is regularly updated
2021-07-30 21:36:40 +02:00
Lennart Poettering 7d963260a1 Merge pull request #20172 from poettering/import-util-tweaks
Import-util: URL processing tweaks
2021-07-30 19:05:06 +02:00
Lennart Poettering ee96d41eba Merge pull request #20170 from poettering/moar-glyphs
util: define more emoji glyphs
2021-07-30 19:03:59 +02:00
Lennart Poettering 07697bfee6 tpm2-util: auto-detect supported PCR banks
Previously, we'd encode PCR policies strictly with the SHA256 PCR bank
set. However, as it appears not all hw implement those. Sad.

Let's add some minimal logic to auto-detect supported PCR banks: if
SHA256 is supported, use that. But if not, automatically fall back to
SHA1.

This then changes both the LUKS code, and the credentials code to
serialize the selected bank, along with the rest of the data in order to
make this robust.

This extends the LUK2 JSON metadata in a compatible way. The credentials
encryption format is modified in an incompatible way however, but given
that this is not part of any official release should be OK.

Fixes: #20134
2021-07-30 19:03:35 +02:00
Lennart Poettering adc0733c2c update TODO 2021-07-30 17:19:55 +02:00
Lennart Poettering 71c8bf2837 boot: optionally update sd-boot on boot
Boot loaders are software like any other, and hence muse be updated in
regular intervals. Let's add a simple (optional) service that updates
sd-boot automatically from the host if it is found installed but
out-of-date in the ESP.

Note that traditional distros probably should invoke "bootctl update"
directly from the package scripts whenver they update the sd-boot
package. This new service is primarily intended for image-based update
systems, i.e. where the rootfs or /usr are atomically updated in A/B
style and where the current boot loader should be synced into the ESP
from the currently booted image every now and then. It can also act as
safety net if the packaging scripts in classic systems are't doing the
bootctl update stuff themselves.

Since updating boot loaders mit be a tiny bit risky (even though we try
really hard to make them robust, by fsck'ing the ESP and mounting it only on
demand, by doing updates mostly as single file updates and by fsync()ing
heavily) this is an optional feature, i.e. subject to "systemctl
enable". However, since it's the right thing to do I think, it's enabled
by default via the preset logic.

Note that the updating logic is implemented gracefully: i.e. it's a NOP
if the boot loader is already new enough, or was never installed.
2021-07-30 17:19:55 +02:00
Lennart Poettering e5a8b4b593 bootctl: tweak "bootctl update" to be a NOP when boot loader is already current and --graceful is given
Previously, the "bootctl update" logic would refrain from downrgading a
boot loader, but if the boot loader that is installed already matched
the version we could install we'd install it anyway, under the
assumption this was effectively without effect. This behaviour was handy
while developing boot loaders, since installing a modified boot loader
didn't require a version bump.

However, outside of the systems of boot loader developers I don't think
this behaviour makes much sense: we should always emphasize doing
minimal changes to the ESP, hence when an update is supposedly not
necessary, then don't do it. Only update if it really makes sense, to
minimize writes to the ESP. Updating the boot loader is a good thing
after all, but doing so redundantly is not.

Also, downgrade the message about this to LOG_NOTICE, given this
shouldn't be a reason to log.

Finally, exit cleanly in this cases (or if another boot loader is
detected)
2021-07-30 16:48:24 +02:00
Lennart Poettering 9554c51425 test: add simple test for import-util 2021-07-30 16:31:24 +02:00
Lennart Poettering 56ce4adafe import-util: tweak url patching helper
let's share some code between import_url_last_component() and
import_url_change_last_component(), and make sure we never eat up the
hostname component of the URL when parsing out the last component.

Let's also make import_url_change_last_component() more generic so that
we can also use it for append components to paths, instead of replacing
suffixes.
2021-07-30 16:23:20 +02:00
Lennart Poettering 30763a32b2 util: add one more helper for generating colored check mark glyphs
This one is useful for a outputs with a slightly more "positive"
outlook, i.e. where only the checkmarks are shown but the crossmarks are
replaced by spaces.

(Usecase: a larger table with many checkmarks, where the red crossmarks
might just be too much negative noise)
2021-07-30 16:18:40 +02:00
Lennart Poettering bf18f4b671 glyph-util: add three more emojis to emoji list 2021-07-30 16:18:05 +02:00
Lennart Poettering 1f0fb7d544 rm-rf: refactor rm_rf_children(), split out body of directory iteration loop
This splits out rm_rf_children_inner() as body of the loop. We can use
that to implement rm_rf_child() for deleting one specific entry in a
directory.
2021-07-30 16:14:37 +02:00
Lennart Poettering d844529dc7 macro: change DECIMAL_STR_WIDTH() return type to size_t, like strlen() and so on 2021-07-30 15:59:29 +02:00
Lennart Poettering 777003365a macro: sizeof() returns size_t, and that's good
Now that CONST_MAX() is a bit more foregiving, let's stick to the native
return type of sizeof() everywhere, which is size_t, instead of casting
to "unsigned", so that on the common archs we don't unnecessarily lose
the upper 32bits.

This semi-reverts d3e4029457.
2021-07-30 15:58:09 +02:00
Lennart Poettering addae96a1a macro: relax CONST_MAX() type check a tiny bit
This checked for strict type compatibility so far, which mean CONST_MAX()
couldn't be used on two differently signed integers, even though
conceptually there's nothing wrong with allowing that here, as C
correctly picks the larger type in the ternary op.

hence, let's explicitly whitelist integer comparisons here, as long as
the signedness matches.
2021-07-30 15:56:56 +02:00
Luca Boccassi a4d9c121cc Merge pull request #20348 from poettering/free-and-replace-double-eval
make free_and_replace() double eval free
2021-07-30 11:38:13 +01:00
Frantisek Sumsal 8bf79f0553 test: correctly detect ASan on s390x
s390x uses BRAS(L) instead of CALL(Q), e.g.:

```
 1009528:	c0 e5 ff ff f8 a0 	brasl	%r14,1008668 <__asan_report_load1@plt>
 10095f0:	c0 e5 ff ff ea ec 	brasl	%r14,1006bc8 <__asan_stack_malloc_4@plt>
 10097f8:	c0 e5 ff ff f8 f8 	brasl	%r14,10089e8 <__asan_report_load8@plt>
```

x86_64 for reference:

```
  4011f3:	e8 48 fe ff ff       	callq  401040 <__asan_report_load1@plt>
  401227:	e8 24 fe ff ff       	callq  401050 <__asan_report_load8@plt>
  401251:	e8 da fd ff ff       	callq  401030 <__asan_init@plt>
```
2021-07-29 23:59:08 +01:00
Lennart Poettering 19fd72df5b main: fix type confusion in do_reexecute()
Let's use size_t for stuff we count in memory. This doesn't matter much,
but is certainly more correct and less eyebrow-raising.

Follow-up for: 846f1da465

See: https://github.com/systemd/systemd/pull/20273#discussion_r679250180
2021-07-29 21:14:38 +02:00
Lennart Poettering 0ddd5e547e xdg-autostart-service: rely on the new double-eval-free free_and_replace()
These semi-reverts 2744c7bb01
2021-07-29 21:13:03 +02:00
Lennart Poettering 7ecc424fbe alloc-util: drop double eval from free_and_replace()
Inspired by: 2744c7bb01
2021-07-29 21:12:58 +02:00
Frantisek Sumsal 7925d693a7 meson: add the versiondep to the static lib deplist as well
Follow-up to 99c645b81a.
2021-07-29 14:56:52 +01:00
Zbigniew Jędrzejewski-Szmek 23a0ffa59f systemctl: allow set-property to be called with a glob pattern
We call "systemctl set-property … Markers=+needs-restart" and this should
also work for globs, e.g. "user@*.service" or "syncthing@*.service".

https://bugzilla.redhat.com/show_bug.cgi?id=1986258
2021-07-29 10:47:28 +02:00
Lennart Poettering 5b74168814 Merge pull request #20337 from poettering/oom-adj-fix
make oom_score_adjust_is_valid() shared again
2021-07-29 10:47:10 +02:00
Lennart Poettering 78d4d37401 Merge pull request #20339 from poettering/bus-vtable-indent-fix
sd-bus: fix indentation in macros
2021-07-29 10:46:50 +02:00
Luca Boccassi a36429971a dissect: use DISKSEQ when waiting for block devices
DISKSEQ is a reliable way to find out if we missed a uevent or not, as
it's monotonically increasing. If we parse an event with a smaller or
no sequence number, we know we need to wait longer. If we parse an
event with a greater sequence number, we know we missed it and the
device was reused.
2021-07-28 20:07:01 +01:00
Luca Boccassi bcef1743a5 loop: parse and store disk sequence number
When loop devices are re-used, the disk sequence number is increased.
Parse it when creating a loop device and store it.
The kernel will never return DISKSEQ=0, so use it to signal that it's
not supported by the current kernel.
2021-07-28 19:59:38 +01:00
Luca Boccassi 122adcb294 udev/sd: add support for DISKSEQ
DISKSEQ is a monotonic per-use unique sequence number, incremented
on each block device create/attach. For example, the same loop device
will have different diskseq each time an object is attached to it.
Add sd/udev helpers to parse/expose it.
2021-07-28 19:59:38 +01:00
Lennart Poettering 0c4801738e sd-bus: add brief inline comment explaining the "reserved" field in the bus vtable structure
Follow-up for: #20253
2021-07-28 20:44:49 +02:00
Lennart Poettering 02f2d2b33b sd-bus: fix indentation in macros
We use multiples of 8 spaces indentation in our C code, do it here too.
2021-07-28 20:39:18 +02:00
Franck Bui 463aef23a7 manager: reexecute on SIGRTMIN+25, user instances only
Before this patch, there was no way to request all running user instances for
reexecuting. However this can be useful especially during package updates
otherwise user instances are never updated and keep running a potentially very
old version of the binaries.

Now assuming that we have enough priviledge, it's possible to request
reexecution of all user instances:

  systemctl kill --signal=SIGRTMIN+25 "user@*.service"

Note that this request is obviously asynchronous as it relies on a
signal. Keeping "systemctl kill" as the only interface should be good enough to
make this obvious and that's the reason why another interface, such as
"systemctl --global daemon-reexec" has not been considered.

PID1 already uses SIGTERM for reexecuting hence sending it SIGRTMIN+25 is a
nop.
2021-07-28 18:50:30 +02:00
Lennart Poettering c62f67f730 parse-util: use oom_score_adjust_is_valid() at one more place 2021-07-28 18:39:41 +02:00
Lennart Poettering c4412d4d33 Revert "Make oom_score_adjust_is_valid() static"
This reverts commit 6bf3c6c900.
2021-07-28 18:39:41 +02:00
Lennart Poettering fac5588944 update TODO 2021-07-28 18:39:17 +02:00
Yegor Alexeyev caf8c6ea3f added missing handling of button release events 2021-07-28 17:34:31 +02:00
Yao Wei f238549b5a Use SKU to identify Dell clamshell models for accelerometer properties
As per request from Dell, we need to use sku property of modalias that
is patched into linux 5.13 for model identification:

  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e26f023e01ef26b4138bc1099af309bdc4523d23
2021-07-28 17:10:22 +02:00
Luca Boccassi a8d1a8e96d Merge pull request #20326 from keszybz/meson-0.53.2
Use some more new meson features
2021-07-28 13:30:37 +01:00
Luca Boccassi 8d5b391b19 Merge pull request #20311 from keszybz/manpage-l10n-report
Man pages cleanups
2021-07-28 12:37:39 +01:00
Frantisek Sumsal 8f876748d3 ci: bump meson version in LGTM
Otherwise LGTM fails to detect the build system:

```
[2021-07-27 23:18:47] [build-stdout] The Meson build system
[2021-07-27 23:18:47] [build-stdout] Version: 0.51.2
[2021-07-27 23:18:47] [build-stdout] Source dir: /opt/src
[2021-07-27 23:18:47] [build-stdout] Build dir: /opt/src/_lgtm_build_dir
[2021-07-27 23:18:47] [build-stdout] Build type: native build
[2021-07-27 23:18:47] [build-stdout] meson.build:3:0: ERROR: Meson version is 0.51.2 but project requires >= 0.53.2
[2021-07-27 23:18:47] [build-stdout] A full log can be found at /opt/src/_lgtm_build_dir/meson-logs/meson-log.txt
```
2021-07-28 11:26:10 +02:00
Zbigniew Jędrzejewski-Szmek e04eae5e1c man/systemctl: rework descriptions of bind and mount-image
The text used "unit's view" to mean mount namespace. But we talk about
mount namespaces in the later part of the paragraph anyway, so trying to
use an "approachable term" only makes the whole thing harder to understand.
Let's use the precise term.

Some paragraph-breaking and re-indentation is done too.
2021-07-28 10:21:21 +02:00