Commit Graph
46681 Commits
Author SHA1 Message Date
Yu Watanabe 80b1156b96 journal: split out server_new() from server_init()
Then, use DEFINE_MAIN_FUNCTION() macro in journald.
No functional change, just refactoring to follow our usual coding style.
2023-12-06 11:00:48 +09:00
Daan De Meyer 0689d46a75 repart: Fix sysext definitions for --make-ddi=
CopyFiles= does not support multiple directories separated by
whitespace. Instead the setting has to be specified multiple times.
2023-12-05 19:26:58 +00:00
Luca Boccassi a14b75e218 selinux: downgrade log about state to trace
It is printed on every invocation of sd-executor, which is noisy and not useful

Follow-up for: bb5232b6a3
2023-12-05 19:25:50 +00:00
Zbigniew Jędrzejewski-Szmek 26e82eef01 sd-journal/catalog: modernize write_catalog() 2023-12-05 19:20:25 +01:00
Zbigniew Jędrzejewski-Szmek d333b236f4 networkd: unvoidify fwrite()
Those were the only two places we did that, so for consistency it's better
to drop it.
2023-12-05 19:18:28 +01:00
Zbigniew Jędrzejewski-Szmek f9568765d4 variuos: fwrite() does not set errno
The man page doesn't even mention errno. It just says that ferror() should
be used to check for errors. Those writes are unlikely to fail, but if they
do, errno might even be 0. Also, we have fflush_and_check() which does
additional paranoia around errno, because we apparently do not trust that
errno will always be set correctly.
2023-12-05 19:18:23 +01:00
Zbigniew Jędrzejewski-Szmek 329050c5e2 systemctl: add "edit --stdin"
This is a fancy wrapper around "cat <<EOF", but:
- the user doesn't need to figure out the file name,
- parent directories are created automatically,
- daemon-reload is implied,
so it's a convenient way to create units or drop-ins.

Closes https://github.com/systemd/systemd/issues/21862.
2023-12-05 18:47:19 +01:00
Luca Boccassi f83a74dfb8 switch-root: also check that mount IDs are the same, not just inodes
If /run/nextroot/ has been set up, use it, even if the inodes are
the same. It could be a verity device that is reused, but with
different sub-mounts or other differences. Or the same / tmpfs with
different /usr/ mounts. If it was explicitly set up we should use it.

Use the new helper to check that the mount IDs are also the same,
not just the inodes.
2023-12-05 17:20:27 +00:00
Luca Boccassi 5134e54625 basic: add fds_are_same_mount() helper 2023-12-05 17:20:27 +00:00
Zbigniew Jędrzejewski-Szmek 232f017b1a systemctl: add message when edit is aborted
If the user edits result in an empty file (after stripping), we would silently
not do anything, aborting the edit. This is rather confusing, let's emit a
notice:

  $ build/systemctl --user edit asdf.service --full --stdin </dev/null
  /home/zbyszek/.config/systemd/user/asdf.service: after editing, new contents are empty, not writing file.

(This also works with an editor, instead of --stdin. The message is printed on
the console and is visible after the editor exits.)

While at it, fix the condition to skip writing file after stripping. We had
"old_contents", but we modified that string. In some code flows, we would
compare the stripped old contents (i.e. a string which by defintion doesn't
have a newline at the end) with a string to which we just appended a newline
(i.e. a string which by defintion has a newline at the end).
2023-12-05 18:11:45 +01:00
Zbigniew Jędrzejewski-Szmek 5161836bd0 shared/edit-util: split out function to populate temp file
In preparation for future changes: I want to add a mode where interactive
editing is not done, and when this preparation is moved to a helper, it's much
easier to skip it.

e->line is initialized to 1 and overwritten even if sync fails. Theoretically
this is against our style, but the alternative is to propagate a temporary
value of line through the layers, which adds a lot of noise. If we fail, this
EditFile object will not be used for anything, to the changed value of .line
has no effect.
2023-12-05 18:11:38 +01:00
Yu Watanabe 829732d40a basic: fix typo 2023-12-05 23:50:25 +09:00
Mike Yuan 5b3562898a systemctl: add support for Sleep() logind call 2023-12-05 22:18:32 +08:00
Mike Yuan cd4dd90b99 logind: introduce Sleep() call and action that automatically choose a sleep operation 2023-12-05 22:18:32 +08:00
Mike Yuan 0f15d14c76 logind: test: make sure string of HandleAction and SleepOperation match 2023-12-05 22:18:32 +08:00
Mike Yuan 181c525e9d logind: put more struct members into designated initializer 2023-12-05 22:18:32 +08:00
Mike Yuan c794877f1d logind: take HandleAction instead of HandleActionData at several places
Preparation for addition of HANDLE_SLEEP.
2023-12-05 22:18:31 +08:00
Mike Yuan 24ab77c3cd hibernate-resume: always clear HibernateLocation if system info matches
Follow-up for a628d933cc

HibernateInfo.from_efi is not actually useful. info.efi is only
set if the system identifier stored in EFI variable matches with
that of the running system, and thus the variable should be cleared
no matter whether resume= is set from kernel cmdline or not.
2023-12-05 16:52:19 +08:00
Mike Yuan 1fe536aa37 sleep: reduce the scope of hibernation_device 2023-12-05 16:52:19 +08:00
Mike Yuan 232efdc5bd hibernate-util: return 1 for hibernation_is_safe only when all checks pass
The return value is currently not used, but let's correct this.
2023-12-05 16:52:19 +08:00
Luca Boccassi cc9f4cad8c executor: apply LogLevelMax earlier
SELinux logs before we have a chance to apply it, move it up as it
breaks TEST-04-JOURNAL:

[  408.578624] testsuite-04.sh[11463]: ++ journalctl -b -q -u silent-success.service
[  408.578743] testsuite-04.sh[11098]: + [[ -z Dec 03 13:38:41 H systemd-executor[11459]: SELinux enabled state cached to: disabled ]]

Follow-up for: bb5232b6a3
2023-12-04 11:45:22 +09:00
Yu Watanabe b88f0fdc87 Merge pull request #30305 from yuwata/seccomp-fix
seccomp: override the default action only when the filter is allow-list
2023-12-04 11:44:58 +09:00
Zbigniew Jędrzejewski-Szmek 8244f394da tests: fix section mapping in test_ukify.py
The regexp only worked if the sections were small enough for the size to
start with "0". I have an initrd that is 0x1078ec7e bytes, so the tests
would spuriously fail.
2023-12-03 12:34:43 +00:00
Yu Watanabe 78b2ad7d67 seccomp-util: also use ENOSYS for unknown syscalls in seccomp_load_syscall_filter_set()
Follow-up for 2331c02d06.

Note, currently, the function is always called with SCMP_ACT_ALLOW as
the default action, except for the test. So, this should not change
anything in the runtime code.
2023-12-03 18:01:30 +09:00
Yu Watanabe 03c0730ffe seccomp-util: override default action only when the filter is allow-list
Follow-up for 2331c02d06.

Fixes #30304.
2023-12-03 18:00:20 +09:00
Zbigniew Jędrzejewski-Szmek 753beeb914 shared/verb: indentation 2023-12-02 16:59:07 +01:00
Mike Yuan 2b98926f98 networkctl: introduce --runtime for editing network config under /run/ 2023-12-02 17:04:57 +08:00
Mike Yuan 7050f7419b networkctl: drop one assertion
If there're no existing drop-ins, the assertions
are unnecessarily triggered.
2023-12-02 17:04:57 +08:00
Mike Yuan e9b7408eb9 networkctl: use RET_GATHER more 2023-12-02 17:04:56 +08:00
Zbigniew Jędrzejewski-Szmek ccd31de8bf stdio-bridge: return immediately if we can
Follow-up for 0321248b79.
2023-12-02 09:47:45 +01:00
Zbigniew Jędrzejewski-Szmek 9ce3440a6f run: fix bad escaping and memory ownership confusion
arg_description was either set to arg_unit (i.e. a const char*), or to
char *description, the result of allocation in run(). But description
was decorated with _cleanup_, so it would be freed when going out of the
function. Nothing bad would happen, because the program would exit after
exiting from run(), but this is just all too messy.

Also, strv_join(" ") + shell_escape() is not a good way to escape command
lines. In particular, one the join has happened, we cannot distinguish
empty arguments, or arguments with whitespace, etc. We have a helper
function to do the escaping properly, so let's use that.

Fixup for 2c29813da3.
2023-12-02 09:47:45 +01:00
Zbigniew Jędrzejewski-Szmek cffa43255a run: adjust indentation 2023-12-02 09:47:45 +01:00
Zbigniew Jędrzejewski-Szmek 72420d39d7 test-macro: use capital test names for macro tests
It's just easier if the test is named as the thing being tested. Also, this way
inconsistent, because lower in the file uppercase test names are used.
2023-12-02 09:47:11 +01:00
Luca Boccassi ebaf2821e6 Merge pull request #30291 from keszybz/seccomp-unknown-syscall
Backwardscompatibly handle syscalls unknown to us or libseccomp
2023-12-02 02:04:24 +00:00
Zbigniew Jędrzejewski-Szmek e6c5386dee core: turn on higher optimization level in seccomp
This mirrors what d75615f398 did for nspawn.

It isn't really a fatal failure if we can't set that, so ignore it in libseccomp
cannot set the attribute.

 line  OP   JT   JF   K
=================================
 0000: 0x20 0x00 0x00 0x00000004   ld  $data[4]
 0001: 0x15 0x00 0xb7 0x40000003   jeq 1073741827 true:0002 false:0185
 0002: 0x20 0x00 0x00 0x00000000   ld  $data[0]
 0003: 0x15 0xb5 0x00 0x00000000   jeq 0    true:0185 false:0004
 0004: 0x15 0xb4 0x00 0x00000001   jeq 1    true:0185 false:0005
 0005: 0x15 0xb3 0x00 0x00000002   jeq 2    true:0185 false:0006
 0006: 0x15 0xb2 0x00 0x00000003   jeq 3    true:0185 false:0007
 0007: 0x15 0xb1 0x00 0x00000004   jeq 4    true:0185 false:0008
 0008: 0x15 0xb0 0x00 0x00000005   jeq 5    true:0185 false:0009
 0009: 0x15 0xaf 0x00 0x00000006   jeq 6    true:0185 false:0010
 ...
 0438: 0x15 0x03 0x00 0x000001be   jeq 446  true:0442 false:0439
 0439: 0x15 0x02 0x00 0x000001bf   jeq 447  true:0442 false:0440
 0440: 0x15 0x01 0x00 0x000001c0   jeq 448  true:0442 false:0441
 0441: 0x06 0x00 0x00 0x00050026   ret ERRNO(38)
 0442: 0x06 0x00 0x00 0x7fff0000   ret ALLOW

 line  OP   JT   JF   K
=================================
 0000: 0x20 0x00 0x00 0x00000004   ld  $data[4]
 0001: 0x15 0x00 0x27 0x40000003   jeq 1073741827 true:0002 false:0041
 0002: 0x20 0x00 0x00 0x00000000   ld  $data[0]
 0003: 0x25 0x01 0x00 0x000000b5   jgt 181  true:0005 false:0004
 0004: 0x05 0x00 0x00 0x00000143   jmp 0328
 0005: 0x25 0x00 0xa1 0x00000139   jgt 313  true:0006 false:0167
 0006: 0x25 0x00 0x51 0x00000179   jgt 377  true:0007 false:0088
 0007: 0x25 0x00 0x29 0x000001a0   jgt 416  true:0008 false:0049
 0008: 0x25 0x00 0x13 0x000001b0   jgt 432  true:0009 false:0028
 0009: 0x25 0x00 0x09 0x000001b8   jgt 440  true:0010 false:0019
 ...
 0551: 0x15 0x03 0x00 0x00000002   jeq 2    true:0555 false:0552
 0552: 0x15 0x02 0x01 0x00000001   jeq 1    true:0555 false:0554
 0553: 0x15 0x01 0x00 0x00000000   jeq 0    true:0555 false:0554
 0554: 0x06 0x00 0x00 0x00050026   ret ERRNO(38)
 0555: 0x06 0x00 0x00 0x7fff0000   ret ALLOW

The program is longer but hopefully faster because of the binary search.
2023-12-02 01:21:53 +01:00
Zbigniew Jędrzejewski-Szmek 309a4212cf shared/seccomp-util: use the same error message for the same condition
We were calling seccomp_syscall_resolve_name three times and using a
slightly different error message in each of the cases.
2023-12-02 01:21:53 +01:00
Zbigniew Jędrzejewski-Szmek 2331c02d06 core: when applying syscall filters, use ENOSYS for unknown calls
glibc starting using fchmodat2 to implement fchmod with flags [1], but
current version of libseccomp does not support fchmodat2 [2]. This is
causing problems with programs sandboxed by systemd. libseccomp needs to know
a syscall to be able to set any kind of filter for it, so for syscalls unknown
by libseccomp we would always do the default action, i.e. either return the
errno set by SystemCallErrorNumber or send a fatal signal. For glibc to ignore
the unknown syscall and gracefully fall back to the older implementation,
we need to return ENOSYS. In particular, tar now fails with the default
SystemCallFilter="@system-service" sandbox [3].

This is of course a wider problem: any time the kernel gains new syscalls,
before libseccomp and systemd have caught up, we'd behave incorrectly. Let's
do the same as we already were doing in nspawn since
3573e032f2, and do the "default action" only
for syscalls which are known by us and libseccomp, and return ENOSYS for
anything else. This means that users can start using a sandbox with the new
syscalls only after libseccomp and systemd have been updated, but before that
happens they behaviour that is backwards-compatible.

[1] https://github.com/bminor/glibc/commit/65341f7bbea824d2ff9d37db15d8be162df42bd3
[2] https://github.com/seccomp/libseccomp/issues/406
[2] https://github.com/systemd/systemd/issues/30250

Fixes https://github.com/systemd/systemd/issues/30250.

In seccomp_restrict_sxid() there's a chunk conditionalized with
'#if defined(__SNR_fchmodat2)'. We need to kep that because seccomp_restrict_sxid()
seccomp_restrict_suid_sgid() uses SCMP_ACT_ALLOW as the default action.
2023-12-02 01:20:28 +01:00
Mike Yuan a8aed6a9b6 core/cgroup: for non-cached attrs, don't return ENODATA blindly
Follow-up for f17b07f4d7

Hope I won't break this thing again...
2023-12-02 00:13:46 +00:00
Zbigniew Jędrzejewski-Szmek ac116f8c27 Merge pull request #30268 from yuwata/network-fix-too-many-waiting-replies
network: fix issue caused by too many waiting replies
2023-12-01 19:54:18 +01:00
Zbigniew Jędrzejewski-Szmek 86a1ee93f3 core: fix comment 2023-12-01 19:40:26 +01:00
Дамјан Георгиевски ef87c84e81 fix: prefix of dmesg pstore files
A change in the kernel[1] renamed the prefix of the pstore files from
`dmesg-efi-` to `dmesg-efi_pstore-`.

[1]
https://git.kernel.org/linus/893c5f1de620
2023-12-01 17:34:43 +00:00
Neil Wilson 145dc0a0f6 homework-quota.c: correct error message in home_update_quota_btrfs
Fixes #30286
2023-12-01 16:41:29 +00:00
Franck Bui 2f26c21171 vconsole-setup: use a consistent log level when setfont fails with EX_OSERR
Since we accept that setfont(8) can fail with EX_OSERR and we dont treat it as
an error, dont log this failure at LOG_ERR.

Before:
-------
/usr/bin/setfont failed with exit status 71.           [LOG_ERR]
Setting fonts failed with a "system error", ignoring.  [LOG_NOTICE]

After:
-----
/usr/bin/setfont failed with a "system error" (EX_OSERR), ignoring.   [LOG_NOTICE]
Setting source virtual console failed, ignoring remaining ones        [LOG_NOTICE]

Follow-up for 93c9a9d235
2023-12-01 13:53:20 +00:00
Zbigniew Jędrzejewski-Szmek 24baee3370 ukify: avoid deprecated datetime call
DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for
                    removal in a future version. Use timezone-aware objects to
                    represent datetimes in UTC: datetime.datetime.now(datetime.UTC).

The difference between the two is that .now(datetime.UTC) returns an object with
a timezone attached, "the numbers" are the same.

>>> datetime.datetime.utcnow(), datetime.datetime.now(datetime.UTC)
(datetime.datetime(2023, 12, 1, 9, 37, 53, 891669),
 datetime.datetime(2023, 12, 1, 9, 37, 53, 891688, tzinfo=datetime.timezone.utc))

This value is fed to cryptography's x509.CertificateBuilder object, so as long
as it can accept a datetime object with tzinfo, the result should be identical.
2023-12-01 12:44:08 +00:00
Luca Boccassi f4a35f2ad9 core: do not drop CAP_SETUID if it is in AmbientCapabilities=
Follow-up for 24832d10b6
2023-12-01 10:48:14 +00:00
Yu Watanabe 4e6a35e2b2 network: do not send too many netlink messages in a single event
Fixes #26743.
2023-12-01 19:45:12 +09:00
Yu Watanabe b3a4f4f06d firewall-util: introduce fw_ctx_get_reply_callback_count() 2023-12-01 19:45:02 +09:00
Yu Watanabe 4256379d99 sd-netlink: introduce netlink_get_reply_callback_count() 2023-12-01 19:44:47 +09:00
Zbigniew Jędrzejewski-Szmek 34c2fc8505 ukify: simplify import 2023-12-01 10:30:16 +01:00
Zbigniew Jędrzejewski-Szmek 2060509d12 kernel-install/60-ukify: use exec() instead of runpy
As suggested by Daniele Nicolodi.

Also drop left-over debug line.
2023-12-01 10:30:16 +01:00