systemd/.git
4 years agounits: make sure importd has CAP_LINUX_IMMUTABLE flag
Lennart Poettering [Fri, 21 May 2021 20:04:33 +0000 (22:04 +0200)]
units: make sure importd has CAP_LINUX_IMMUTABLE flag

Since d8f9686c0f1f276c0a687d9bd69f3adf33f15a95 we use the chattr +i flag
for marking containers in directories as reead-only. But to do so we
need the cap for it, hence grant it.

Fixes: #19115
(cherry picked from commit 86204ae145e38a4557981a92ce91a8ce4318e181)

4 years agounits: skip some units in the initrd
Zbigniew Jędrzejewski-Szmek [Fri, 21 May 2021 08:53:25 +0000 (10:53 +0200)]
units: skip some units in the initrd

I'm working on building initramfs images directly from normal packages, and it
doesn't make sense for those units to be started. Pristine system rpms need to
behave correctly as much as possible also in the initrd, and those units are
enabled by the rpms. There usually isn't enough time for the timer to actually
fire, but starting it gives a line on the console and generally looks confusing
and sloppy. Flushing the journal means that its actually lost, since the real
/var is not available yet.

Another approach would be not enable those units, but right now they are
statically enabled, and changing that would be more work, and doesn't really
seem necessary, since the condition checks are very quick.

Checking for /etc/initrd-release is the standard condition that the initrd
units use, so let's do the same here.

(cherry picked from commit fe7f113c1331e11af4e9f815d7305c8b1b332312)

4 years agotest-env-util: use streq_ptr when comparing directly the result of getenv
Luca Boccassi [Fri, 21 May 2021 12:39:24 +0000 (13:39 +0100)]
test-env-util: use streq_ptr when comparing directly the result of getenv

It might return NULL.

Fixes CID #1453247

(cherry picked from commit 05576809194754989f88f83c7104341c35944546)

4 years agosd-device: use strjoina() more again in sd_device_new_from_subsystem_sysname()
Lennart Poettering [Mon, 10 May 2021 14:41:46 +0000 (16:41 +0200)]
sd-device: use strjoina() more again in sd_device_new_from_subsystem_sysname()

This reverts a major part of: e17c95af8e450caacde692875b30675cea75211f

Using format strings for concatenating strings is pretty unefficient,
and using PATH_MAX buffers unpretty as well. Let's revert to using
strjoina() as before.

However, to fix the fuzz issue at hand, let's explicitly verify the two
input strings ensuring they are valid path names. This includes a length
check (to 2K each), thus making things prettier, faster and using less
memory again.

(cherry picked from commit f5e775973a22e10e0813b56cb3e43d5d415979f7)

4 years agojournal: fix uninitialized variable use
Luca Boccassi [Thu, 20 May 2021 09:35:36 +0000 (10:35 +0100)]
journal: fix uninitialized variable use

If the journal file being processed is archivied, seqnum_id will not be
initialized before being passed on, and coverity complains.
Initialize it to zero.

CID #1453235

(cherry picked from commit 06a368e8198a9cbfad86ba17bba6a76a33f15492)

4 years agonetwork: fix an infinite loop
Yu Watanabe [Thu, 20 May 2021 07:14:17 +0000 (16:14 +0900)]
network: fix an infinite loop

Fixes #19467.

(cherry picked from commit e8f99f4e249916e12c09ee5cc9a108cba6a2b5c0)

4 years agoselinux: invoke selinux_set_callback(3) more type-safe
Christian Göttsche [Fri, 14 May 2021 12:14:25 +0000 (14:14 +0200)]
selinux: invoke selinux_set_callback(3) more type-safe

(cherry picked from commit 57e70396dfdc6835c4a9141d29043e4af407205d)

4 years agoselinux: reload label db on policy load with libselinux 3.2
Christian Göttsche [Fri, 14 May 2021 12:12:39 +0000 (14:12 +0200)]
selinux: reload label db on policy load with libselinux 3.2

Currently the label database is not reloaded with libselinux 3.2 on a
policy reload.

Since libselinux 3.2 avc_open(3) uses the SELinux status page instead of
a netlink socket to check for policy reloads.
The status page is also queried in mac_selinux_maybe_reload().
Thus calls to selinux_check_access(3) might consume an update, queried
by selinux_status_updated(3), leaving mac_selinux_maybe_reload() unable
to detect a policy reload.

Do not use selinux_status_updated(3), use selinux_status_policyload(3)
unconditionally.

Relevant libselinux commit: https://github.com/SELinuxProject/selinux/commit/05bdc03130d741e53e1fb45a958d0a2c184be503

Debian Bullseye is going to ship libselinux 3.1, so stay compatible for
backports.

(cherry picked from commit c46c76881144271b9a18842e086d1318febdb372)

4 years agoman: mention that drop-in files are merged in alphanumeric order
Yu Watanabe [Thu, 20 May 2021 06:55:06 +0000 (15:55 +0900)]
man: mention that drop-in files are merged in alphanumeric order

This addresses the request in https://github.com/systemd/systemd/issues/19467#issuecomment-829332877.

(cherry picked from commit e6655fbe40a9774c8250c1ae8e1c1677aadb98a6)

4 years agoman: document default rlimits
Anita Zhang [Wed, 19 May 2021 07:33:59 +0000 (00:33 -0700)]
man: document default rlimits

Fixes #19645

(cherry picked from commit 1539124b394cec0c8d9d67a9ad6dbd00d085bdde)

4 years agokbd-model-map: add mapping 'es-dvorak'
Franck Bui [Wed, 19 May 2021 08:18:21 +0000 (10:18 +0200)]
kbd-model-map: add mapping 'es-dvorak'

And update test-keymap-util accordingly.

While at it, make sure to use tabs everywhere.

(cherry picked from commit 0495728429096a405b1d2cf1fa283a90c30ebaa9)

4 years agotest: reduce debugging logs in test-event
Yu Watanabe [Wed, 19 May 2021 08:08:59 +0000 (17:08 +0900)]
test: reduce debugging logs in test-event

The logs mostly give no information, but fill CI results.

(cherry picked from commit 834f3ba1a0a6ac8ea4607d380feeeba9d2edd43d)

4 years agosystemctl: re-align colon in status output
Lennart Poettering [Fri, 14 May 2021 16:20:32 +0000 (18:20 +0200)]
systemctl: re-align colon in status output

(cherry picked from commit 1d406dceb769da2123417e6a06c85a99ebead7b1)

4 years agotest/run-unit-tests: make script compatible with python3.6
Zbigniew Jędrzejewski-Szmek [Tue, 18 May 2021 08:21:34 +0000 (10:21 +0200)]
test/run-unit-tests: make script compatible with python3.6

dataclasses were added in python3.7, but bionic has python3.6.
Yes, the new code is a travesty, but it does the job.

Fixes #19640.

(cherry picked from commit 6b908313ef4b57c4b23bb49aec55c84ef981f949)

4 years agotest: combine stdout/stderr from failed test
Dan Streetman [Fri, 30 Apr 2021 00:21:10 +0000 (20:21 -0400)]
test: combine stdout/stderr from failed test

Printing stdout and stderr from a failed test makes it harder to
interpret what the specific problem was; instead let's print out
the lines in order as we got them when the test was run

Also save failed test output to file if ARTIFACT_DIRECTORY is defined

(cherry picked from commit d57e871c60805e3f1f57729ea8022477a611697d)

4 years agoman: only the system manager does not pass vars in ManagerEnvironment=
Anita Zhang [Tue, 18 May 2021 08:23:36 +0000 (01:23 -0700)]
man: only the system manager does not pass vars in ManagerEnvironment=

User managers always pass their environment on to their children.
Make that clear in the description of ManagerEnvironment= which
states that none of those args will get passed to child processes of
service managers.

(cherry picked from commit c54cfef3968613f9e86e76a3337148360e20150e)

4 years agotest: Allow running only a subset of integration tests by setting SELECTED_TESTS
Balint Reczey [Mon, 10 May 2021 18:46:37 +0000 (20:46 +0200)]
test: Allow running only a subset of integration tests by setting SELECTED_TESTS

(cherry picked from commit 39f1bdecc20daae6a659a24408914b78bd65e423)

4 years agomkosi: stop pulling in workaround packages
Zbigniew Jędrzejewski-Szmek [Mon, 17 May 2021 07:59:02 +0000 (09:59 +0200)]
mkosi: stop pulling in workaround packages

libfido2 was pulled in recently [1], and the dependency on libzstd has been
present for a long time.

nano is now the default editor in Fedora [2], but we still want to pull it in
to have an editor in minimal images.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1949505
[2] https://fedoraproject.org/wiki/Changes/UseNanoByDefault

(cherry picked from commit 9578b472f47b733951b9ce107ade36dc33d4fe18)

4 years agoFixed a typo
ei-ke [Sun, 16 May 2021 16:12:12 +0000 (18:12 +0200)]
Fixed a typo

(cherry picked from commit 410477a78f598e753996e3b7ee40176b219b8379)

4 years agonetwork:dhcp4_server_configure returns if not able to get timezone v248.3
tramsay [Mon, 5 Apr 2021 22:12:49 +0000 (17:12 -0500)]
network:dhcp4_server_configure returns if not able to get timezone

When /etc/localtime is a symbolic link pointing to another symbolic
link, get_timezone will return -EINVAL instead of the timezone.
This issue can cause systemd-networkd DHCPServer to fail.

Instead of returning failure, log a warning indicating that that
the timezone will not be sent.

modified:   networkd-dhcp-server.c

(cherry picked from commit 7b5018ca9e6d3279887ec7113818f41d5b831c4d)

4 years agomeson: call find_program() once and reuse the variable everywhere
Zbigniew Jędrzejewski-Szmek [Fri, 14 May 2021 12:16:17 +0000 (14:16 +0200)]
meson: call find_program() once and reuse the variable everywhere

Meson 0.58 has gotten quite bad with emitting a message every time
a quoted command is used:
Program /home/zbyszek/src/systemd-work/tools/meson-make-symlink.sh found: YES (/home/zbyszek/src/systemd-work/tools/meson-make-symlink.sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program sh found: YES (/usr/bin/sh)
Program xsltproc found: YES (/usr/bin/xsltproc)
Configuring custom-entities.ent using configuration
Message: Skipping bootctl.1 because ENABLE_EFI is false
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Message: Skipping journal-remote.conf.5 because HAVE_MICROHTTPD is false
Message: Skipping journal-upload.conf.5 because HAVE_MICROHTTPD is false
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Message: Skipping loader.conf.5 because ENABLE_EFI is false
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
Program ln found: YES (/usr/bin/ln)
...

Let's suffer one message only for each command. Hopefully we can silence
even this when https://github.com/mesonbuild/meson/issues/8642 is
resolved.

4 years agoresolved: fix braino with reference counting and linked lists
Zbigniew Jędrzejewski-Szmek [Fri, 14 May 2021 08:49:24 +0000 (10:49 +0200)]
resolved: fix braino with reference counting and linked lists

In 0e0fd08fc832b8f42e567d722d388eba086da5ff I added reference counts to keep
track of the DnsQueryCandidate objects. Unfortunately, dns_query_unref_candidates()
was written as

     while (q->candidates)
           dns_query_candidate_unref(q->candidates);

i.e. it would keep dropping the reference count as many times as needed for it
to hit 0, making the patch less than fully effective.

dns_query_unref_candidates() is renamed to dns_query_detach_candidates() and
changed to drop exactly one reference from each of the linked candidates.

Example failure:
==463== Invalid read of size 8
==463==    at 0x419C93: dns_query_candidate_go (resolved-dns-query.c:159)
==463==    by 0x41A143: dns_query_candidate_notify (resolved-dns-query.c:304)
==463==    by 0x434BD6: dns_transaction_complete (resolved-dns-transaction.c:437)
==463==    by 0x436A0F: dns_transaction_process_dnssec (resolved-dns-transaction.c:976)
==463==    by 0x4378C1: dns_transaction_process_reply (resolved-dns-transaction.c:1387)
==463==    by 0x437CE9: on_dns_packet (resolved-dns-transaction.c:1444)
==463==    by 0x4B2DC9B: source_dispatch (sd-event.c:3512)
==463==    by 0x4B2FB1F: sd_event_dispatch (sd-event.c:4077)
==463==    by 0x4B2FFFA: sd_event_run (sd-event.c:4138)
==463==    by 0x4B301D6: sd_event_loop (sd-event.c:4159)
==463==    by 0x464A24: run (resolved.c:92)
==463==    by 0x464B3C: main (resolved.c:99)
==463==  Address 0x5f409d0 is 32 bytes inside a block of size 72 free'd
==463==    at 0x48410E4: free (vg_replace_malloc.c:755)
==463==    by 0x418EDF: mfree (alloc-util.h:48)
==463==    by 0x4197E8: dns_query_candidate_free (resolved-dns-query.c:67)
==463==    by 0x4198B7: dns_query_candidate_unref (resolved-dns-query.c:70)
==463==    by 0x41A2E3: dns_query_unref_candidates (resolved-dns-query.c:337)
==463==    by 0x41C5FE: dns_query_cname_redirect (resolved-dns-query.c:1028)
==463==    by 0x41CA04: dns_query_process_cname_one (resolved-dns-query.c:1128)
==463==    by 0x41CA80: dns_query_process_cname_many (resolved-dns-query.c:1157)
==463==    by 0x40C0BD: bus_method_resolve_hostname_complete (resolved-bus.c:198)
==463==    by 0x41B312: dns_query_complete (resolved-dns-query.c:562)
==463==    by 0x41C1AC: dns_query_accept (resolved-dns-query.c:922)
==463==    by 0x41C2C4: dns_query_ready (resolved-dns-query.c:955)
==463==    by 0x41A162: dns_query_candidate_notify (resolved-dns-query.c:314)
==463==    by 0x434BD6: dns_transaction_complete (resolved-dns-transaction.c:437)
==463==    by 0x438995: dns_transaction_prepare (resolved-dns-transaction.c:1728)
==463==    by 0x43921D: dns_transaction_go (resolved-dns-transaction.c:1928)
==463==    by 0x419C7C: dns_query_candidate_go (resolved-dns-query.c:163)
==463==    by 0x41A143: dns_query_candidate_notify (resolved-dns-query.c:304)
==463==    by 0x434BD6: dns_transaction_complete (resolved-dns-transaction.c:437)
==463==    by 0x436A0F: dns_transaction_process_dnssec (resolved-dns-transaction.c:976)
==463==    by 0x4378C1: dns_transaction_process_reply (resolved-dns-transaction.c:1387)
==463==    by 0x437CE9: on_dns_packet (resolved-dns-transaction.c:1444)
==463==    by 0x4B2DC9B: source_dispatch (sd-event.c:3512)
==463==    by 0x4B2FB1F: sd_event_dispatch (sd-event.c:4077)
==463==    by 0x4B2FFFA: sd_event_run (sd-event.c:4138)
==463==    by 0x4B301D6: sd_event_loop (sd-event.c:4159)
==463==    by 0x464A24: run (resolved.c:92)
==463==    by 0x464B3C: main (resolved.c:99)
==463==  Block was alloc'd at
==463==    at 0x483E86F: malloc (vg_replace_malloc.c:380)
==463==    by 0x418F81: malloc_multiply (alloc-util.h:96)
==463==    by 0x419378: dns_query_candidate_new (resolved-dns-query.c:23)
==463==    by 0x41B42C: dns_query_add_candidate (resolved-dns-query.c:582)
==463==    by 0x41BB7A: dns_query_go (resolved-dns-query.c:762)
==463==    by 0x40CE3A: bus_method_resolve_hostname (resolved-bus.c:464)
==463==    by 0x4A84B86: method_callbacks_run (bus-objects.c:414)
==463==    by 0x4A87961: object_find_and_run (bus-objects.c:1323)
==463==    by 0x4A87FEE: bus_process_object (bus-objects.c:1443)
==463==    by 0x4AA3434: process_message (sd-bus.c:2964)
==463==    by 0x4AA3623: process_running (sd-bus.c:3006)
==463==    by 0x4AA4110: bus_process_internal (sd-bus.c:3226)
==463==    by 0x4AA41EF: sd_bus_process (sd-bus.c:3253)
==463==    by 0x4AA5343: io_callback (sd-bus.c:3604)
==463==    by 0x4B2DC9B: source_dispatch (sd-event.c:3512)
==463==    by 0x4B2FB1F: sd_event_dispatch (sd-event.c:4077)
==463==    by 0x4B2FFFA: sd_event_run (sd-event.c:4138)
==463==    by 0x4B301D6: sd_event_loop (sd-event.c:4159)
==463==    by 0x464A24: run (resolved.c:92)
==463==    by 0x464B3C: main (resolved.c:99)

Fixes #19376.

(cherry picked from commit c856ef0457c35e9edfdbf085b69ec81c126d48e5)

4 years agorun: update checks to allow running with a user's bus
Anita Zhang [Thu, 13 May 2021 08:17:51 +0000 (01:17 -0700)]
run: update checks to allow running with a user's bus

systemd-run is documented to as being able to connect and run on a
specific user bus with "--user --machine=lennart@.host" arguments.
This PR updates some logic that prevented this from working.

(cherry picked from commit cbdc29492097e24ef3320280bc2a8dedbce02d9a)

4 years agoresolved.conf.in: add missing Quad9 servers
Michael Catanzaro [Tue, 11 May 2021 13:24:55 +0000 (08:24 -0500)]
resolved.conf.in: add missing Quad9 servers

The example configuration is missing half of Quad9's addresses.

(cherry picked from commit aa2b370dddc7e37df33769a488d6c3dce89b4e17)

4 years agoresolved: be more careful with weird links with low MTUs
Lennart Poettering [Tue, 11 May 2021 20:21:52 +0000 (22:21 +0200)]
resolved: be more careful with weird links with low MTUs

Apparently CAN links will show up in rtnetlink with very low MTUs. We
shouldn't consider them relevant if no IP is spoken over them, since
these MTUs are irrelevant for us then.

Hence, let's check if there's an address assigned to the link before
considering its MTU.

As additional safety net filter out MTUs smaller than the minimum DNS
packet size, too.

Finally, in case we don't find any suitable interface MTU, let's default
to 1500 as the generic Ethernet MTU.

Fixes: #19396
(cherry picked from commit 5a0d0b8f9cdfcbb82c4a89b28f0ebce414c9ecfe)

4 years agocore: don't accidentally unref a varlink connection twice
Lennart Poettering [Fri, 12 Mar 2021 21:21:58 +0000 (22:21 +0100)]
core: don't accidentally unref a varlink connection twice

Let's make sure that our close handler unrefs a connection again that we
are already unreffing a few stack frames up by invalidating the pointer
first, and dropping the ref counter only after that.

Replaces: 39ad3f1c092b5dffcbb4b1d12eb9ca407f010a3c

Fixes: #18025
(cherry picked from commit d65e974e67e47222cdebd9d0b6becd6642547ce2)

4 years agoRevert "varlink: avoid using dangling ref in varlink_close_unref()"
Lennart Poettering [Fri, 12 Mar 2021 21:21:40 +0000 (22:21 +0100)]
Revert "varlink: avoid using dangling ref in varlink_close_unref()"

This reverts commit 39ad3f1c092b5dffcbb4b1d12eb9ca407f010a3c.

(cherry picked from commit cc6b0a18ff73325e2ecf0c5d857f4fdca75d97b4)

4 years agopam: fix typo try_authtok → use_authtok
Lennart Poettering [Wed, 12 May 2021 08:33:27 +0000 (10:33 +0200)]
pam: fix typo try_authtok → use_authtok

This was a copy/paste mistae apparently, there's not "try_authtok" and
this was supposed to copy what Fedora uses, which uses "use_authtok"
correctly. Hence adjust this.

Fixes: #19369
(cherry picked from commit 971c07fc6812315c2b27015dfcc652a747f919ed)

4 years agobootctl: same entry path check case-insensitive
zsien [Mon, 10 May 2021 07:42:54 +0000 (15:42 +0800)]
bootctl: same entry path check case-insensitive

Some motherboards convert the path to uppercase under certain circumstances
(e.g. after booting into the Boot Menu in the ASUS ROG STRIX B350-F GAMING).

(cherry picked from commit 5c2e5957678462d871c5c2ea5261becec5f8f80f)

4 years agoman: network: use `networkctl list` instead of `status` to list network interface...
Lucas Magasweran [Mon, 10 May 2021 08:11:28 +0000 (10:11 +0200)]
man: network: use `networkctl list` instead of `status` to list network interface type

To determine the network interface type for use in the `Type=` directive, it is more concise to use the `list` command. Whereas, the `status` command requires an interface parameter.

For example, on a RaspberryPi 4 the following shows that the `wlan0` interface type `wlan` is more coveniently listed by the `list` command.

```
root@raspberrypi4-64:~# networkctl list
IDX LINK  TYPE     OPERATIONAL SETUP
  1 lo    loopback carrier     unmanaged
  2 eth0  ether    routable    configured
  3 wlan0 wlan     off         unmanaged

3 links listed.
```

Whereas the `networkctl status` command doesn't include this information.

```
root@raspberrypi4-64:~# networkctl status
●   State: routable
  Address: 192.168.1.141 on eth0
           fd8b:8779:b7a4::f43 on eth0
           fd8b:8779:b7a4:0:dea6:32ff:febe:d1ce on eth0
           fe80::dea6:32ff:febe:d1ce on eth0
  Gateway: 192.168.1.1 (CZ.NIC, z.s.p.o.) on eth0
      DNS: 192.168.1.1

May 07 14:17:18 raspberrypi4-64 systemd-networkd[212]: eth0: Gained carrier
May 07 14:17:19 raspberrypi4-64 systemd-networkd[212]: eth0: Gained IPv6LL
May 07 14:17:19 raspberrypi4-64 systemd-networkd[212]: eth0: DHCPv6 address fd8b:8779:b7a4::f43/128 timeout preferred -1 valid -1
May 07 14:17:21 raspberrypi4-64 systemd-networkd[212]: eth0: DHCPv4 address 192.168.1.141/24 via 192.168.1.1
```

To get the interface type using the `status` command you need to specify an additional argument.

```
root@raspberrypi4-64:~# networkctl status wlan0
● 3: wlan0
                     Link File: /lib/systemd/network/99-default.link
                  Network File: n/a
                          Type: wlan
                         State: off (unmanaged)
                          Path: platform-fe300000.mmcnr
                        Driver: brcmfmac
                    HW Address: dc:a6:32:be:d1:cf (Raspberry Pi Trading Ltd)
                           MTU: 1500 (min: 68, max: 1500)
                         QDisc: noop
  IPv6 Address Generation Mode: eui64
          Queue Length (Tx/Rx): 1/1
```

(cherry picked from commit 2480ca95bac0f1bed350ba8d5aef1ef92be0f8a4)

4 years agonetwork: examples: use wlan for Type instead of wifi
Lucas Magasweran [Mon, 10 May 2021 08:09:56 +0000 (10:09 +0200)]
network: examples: use wlan for Type instead of wifi

(cherry picked from commit b419e8776bc2dc1ca113c8332ed465724bff053a)

4 years agoresolve: remove RRs from zones before an update
Roman Beranek [Fri, 30 Apr 2021 13:51:44 +0000 (15:51 +0200)]
resolve: remove RRs from zones before an update

During an update of RRs, the records of each DNS-SD service are
replaced with new ones. However the old RRs can only be removed from
the mDNS scopes as long as they remain accessible from the DnssdService
structures, otherwise they remain stuck there.

Therefore the removal must take place before the update.

(cherry picked from commit ee3713b71ddf182852a399953968a2b39af22104)

4 years agomodules-load: inline interator variable v248.2
Zbigniew Jędrzejewski-Szmek [Fri, 7 May 2021 11:24:03 +0000 (13:24 +0200)]
modules-load: inline interator variable

4 years agonss-systemd: properly handle empty membership lists
Lennart Poettering [Wed, 5 May 2021 16:57:30 +0000 (18:57 +0200)]
nss-systemd: properly handle empty membership lists

When we are queried for membership lists on a system that has exactly
zero, then we'll return ESRCH immediately instead of at EOF. Which is
OK, but we need to handle this in various places, and not get confused
by it.

(cherry picked from commit a1aa41e4e175c2712b97600d7e10e9d6c58e5543)

4 years agonss-systemd: reset the right field
Lennart Poettering [Wed, 5 May 2021 14:05:43 +0000 (16:05 +0200)]
nss-systemd: reset the right field

(cherry picked from commit 1fdfca4da739f47516513afc66d4c7008c9badfd)

4 years agoFix indent prefix being used as a suffix in systemd-analyze dump for some properties
Mike Kazantsev [Thu, 6 May 2021 14:15:04 +0000 (19:15 +0500)]
Fix indent prefix being used as a suffix in systemd-analyze dump for some properties

(cherry picked from commit a7bd1656f3ee3d43126c50e4baad9da77620022e)

4 years agouserdb: honour USERDB_AVOID_SHADOW flag also when iterating
Lennart Poettering [Mon, 3 May 2021 18:06:15 +0000 (20:06 +0200)]
userdb: honour USERDB_AVOID_SHADOW flag also when iterating

(cherry picked from commit 7c67419117f19a85cf3e7e1513c072be2b767a74)

4 years agouserdb: add missing 'else'
Lennart Poettering [Fri, 30 Apr 2021 21:09:35 +0000 (23:09 +0200)]
userdb: add missing 'else'

(cherry picked from commit d4f560df4f75d8bc5816a515c000f62cb796fa9f)

4 years agouserdb: remove unnecesary repeated if check
Lennart Poettering [Fri, 30 Apr 2021 21:08:55 +0000 (23:08 +0200)]
userdb: remove unnecesary repeated if check

(cherry picked from commit 77fe7d15931cc17c933ae8778c4161112783dc79)

4 years agouserdb: count NSS records too
Lennart Poettering [Fri, 30 Apr 2021 21:08:21 +0000 (23:08 +0200)]
userdb: count NSS records too

(cherry picked from commit 27a5a22f0354568e1c7e6292689ad947aa16aaac)

4 years agooomd: threshold swap kill candidates to usages of more than 5%
Anita Zhang [Fri, 26 Mar 2021 09:37:01 +0000 (02:37 -0700)]
oomd: threshold swap kill candidates to usages of more than 5%

In some instances, particularly with swap on zram, swap used will be high
while there is still a lot of memory available. FB OOMD handles this by
thresholding kills to X% of total swap usage. Let's do the same thing here.

Anecdotally with these thresholds and my laptop which is exclusively swap
on zram I can sit at 0K / 4G swap free with most of memory free and
systemd-oomd doesn't kill anything.

Partially addresses aggressive kill behavior from
https://bugzilla.redhat.com/show_bug.cgi?id=1941170

(cherry picked from commit 685b0985f0faeb349d1449f8e9d87a9c87e1e24f)

4 years agooomd: don't get pressure candidates on every interval
Anita Zhang [Fri, 26 Mar 2021 08:53:15 +0000 (01:53 -0700)]
oomd: don't get pressure candidates on every interval

Only start collecting candidates for a memory pressure kill when we're
hitting the limit (but before the duration hitting that limit is
exceeded). This brings CPU util from ~1% to 0.3%.

Addresses CPU util from
https://bugzilla.redhat.com/show_bug.cgi?id=1941340
and
https://bugzilla.redhat.com/show_bug.cgi?id=1944646

(cherry picked from commit cb13961ada52c1b27f6d6c2c6e37a2901f01ed30)

4 years agooomd: force DefaultMemoryPressureDurationSec= to be greater than or equal 1 sec
Anita Zhang [Fri, 26 Mar 2021 08:19:10 +0000 (01:19 -0700)]
oomd: force DefaultMemoryPressureDurationSec= to be greater than or equal 1 sec

(cherry picked from commit a858355e4a7168625ec1b9e5d17fdb6a11dfecb8)

4 years agooomd: delete unused variables
Anita Zhang [Fri, 26 Mar 2021 07:54:46 +0000 (00:54 -0700)]
oomd: delete unused variables

(cherry picked from commit 14140b35440306d2fc1f564b8a24aed0d65e44ba)

4 years agooomd: rename last_hit_mem_pressure_limit -> mem_pressure_limit_hit_start
Anita Zhang [Sat, 27 Mar 2021 09:02:00 +0000 (02:02 -0700)]
oomd: rename last_hit_mem_pressure_limit -> mem_pressure_limit_hit_start

Since this is only changed the first time the limit is hit (and remains
set as long as the pressure remains over), I changed the name to better
reflect that.

Keeps consistent with "last_had_mem_reclaim" which is actually updated
every time there is reclaim activity.

(cherry picked from commit 69c8f0255a0a8127548907028bef09ea66056f9f)

4 years agooomd: rework memory reclaim detection logic
Anita Zhang [Fri, 26 Mar 2021 07:39:25 +0000 (00:39 -0700)]
oomd: rework memory reclaim detection logic

systemd-oomd only monitors and kills within a selected cgroup subtree
For memory pressure kills, this means it's unnecessary to get the
pgscan rate across all the monitored memory pressure cgroups.
The increase will show up whether we do a total sum or not, but since
we only care about the increase in the subtree we're about to target
for a kill, we can simplify the code a bit by not doing this total sum.

(cherry picked from commit df637ede7b4e1d0faf8d620d626a0af230712a9e)

4 years agooomd: refactor pgscan_rate calculation into helper
Anita Zhang [Fri, 26 Mar 2021 06:54:22 +0000 (23:54 -0700)]
oomd: refactor pgscan_rate calculation into helper

(cherry picked from commit 37d8020ccc2f54260b581af416e02294c7591cfc)

4 years agooomd: split swap and mem pressure event timers
Anita Zhang [Wed, 24 Mar 2021 09:17:04 +0000 (02:17 -0700)]
oomd: split swap and mem pressure event timers

One thing that came out of the test week is that systoomd needs to poll
more frequently so as not to race with the kernel oom killer in
situations where memory is eaten quickly. Memory pressure counters are
lagging so it isn't worthwhile to change the current read rate; however swap
is not lagging and can be checked more frequently.

So let's split these into 2 different timer events. As a result, swap
now also doesn't have to be subject to the post-action (post-kill) delay
that we need for memory pressure events.

Addresses some of slowness to kill discussed in
https://bugzilla.redhat.com/show_bug.cgi?id=1941340

(cherry picked from commit 81d66fab342e112aefe8b5f43bc853ef66c92add)

4 years agotest: add explicit test for bind_remount_one_with_mountinfo()
Lennart Poettering [Wed, 24 Mar 2021 12:45:25 +0000 (13:45 +0100)]
test: add explicit test for bind_remount_one_with_mountinfo()

(cherry picked from commit 67d22a366567df874352099ff38083ffb3024d72)

4 years agotest: add test for bind_remount_recursive()
Lennart Poettering [Wed, 24 Mar 2021 12:44:56 +0000 (13:44 +0100)]
test: add test for bind_remount_recursive()

(cherry picked from commit 10cdbb8372238337e0789fc4fc40949f55caddb6)

4 years agomount-util: generate failure if bind_remount_one_with_mountinfo() is called on non...
Lennart Poettering [Wed, 24 Mar 2021 13:19:04 +0000 (14:19 +0100)]
mount-util: generate failure if bind_remount_one_with_mountinfo() is called on non-existing path

(cherry picked from commit 0338df47cfaeb023c7c2eaf6b698060fd133157b)

4 years agomount-util: handle remount failures gracefully if flags already match
Lennart Poettering [Wed, 24 Mar 2021 13:17:20 +0000 (14:17 +0100)]
mount-util: handle remount failures gracefully if flags already match

In bind_remount_one_with_mountinfo() let's handle mount failures
gracefully if the flags already match anyway. This isn't perfect, since
it mixes up superblock and mount point flags, but it's close enough.

(cherry picked from commit b23c6a6411fd58ac281642bcae915a7ea55db5c7)

4 years agomount-util: fold what we need from get_mount_flags() bind_remount_one_with_mountinfo()
Lennart Poettering [Wed, 24 Mar 2021 13:16:45 +0000 (14:16 +0100)]
mount-util: fold what we need from get_mount_flags() bind_remount_one_with_mountinfo()

And get rid of get_mount_flags() altogether.

(This drops the statvfs() fallback that get_mount_flags() did. That
fallback was incomplete however, and mostly hid errors. Our primary
avenue to get mount flags is /proc/self/mountinfo and we should trust
it, and fix bugs we might encounter with it, but not tape over it.
Dropping the fallback is relevant in particular as it actually returned
mount flags for any path, not just mount points, which was very icky.)

(cherry picked from commit 2c5ff8ea76d8c3c9944567ae97f498925dfcd443)

4 years agomount-util: store mount flags in "todo" list in + handle submounts gracefully
Lennart Poettering [Wed, 24 Mar 2021 13:07:32 +0000 (14:07 +0100)]
mount-util: store mount flags in "todo" list in + handle submounts gracefully

This replaces the "todo" set with a "todo" hash map that stores the
mount flags we found. This makes an explicit call to get_mount_flags()
unncessary, since we have the flags handy right-away, and lowers our
work from O(n^2) to O(n). Nice!

The "done" set is also improved slightly: we'll use more modern ways to
allocate it, via set_ensure_consume(), and freeing-via-hash_ops.

Finally, failures on submount remounts are now handled gracefully,
there are just too many reasons why they might fail, given NFS, autofs,
FUSE which weird access controls, where even root might lack the privs
to do something.

Fixes: #16156
(cherry picked from commit ba8dced2a60d8535bf6d685e2fd164e5ff3f056b)

4 years agomount-util: extend comment a bit, mention that we aren't atomic in behaviour
Lennart Poettering [Wed, 24 Mar 2021 13:06:22 +0000 (14:06 +0100)]
mount-util: extend comment a bit, mention that we aren't atomic in behaviour

(cherry picked from commit 4b6ef52756ce1be1bd365c2bb63ad4f0c895c1a5)

4 years agomount-util: shortcut things after generating top-level bind mount
Lennart Poettering [Wed, 24 Mar 2021 13:02:29 +0000 (14:02 +0100)]
mount-util: shortcut things after generating top-level bind mount

Instead of marking the bind mount read-only right-away, let's just
restart the loop, so that we'll pick it up like any other mount and then
remount like that.

(cherry picked from commit 5c5753b9ea5cc012586ae90d357d460dec4301a4)

4 years agomount-util: reorder a few things
Lennart Poettering [Wed, 24 Mar 2021 12:56:55 +0000 (13:56 +0100)]
mount-util: reorder a few things

Let's always query one property, check it, and then query the next,
preferring "cheap" ones over "slow" ones (i.e. cheap are the ones we can
check directly, and slow are the ones we need to check with some loop of
some kind).

(cherry picked from commit d6bfab118d2e7c4c07566718175f4f7ec7a2387b)

4 years agopath: drop simplification of path in bind_remount_recursive_with_mountinfo()
Lennart Poettering [Wed, 24 Mar 2021 12:49:06 +0000 (13:49 +0100)]
path: drop simplification of path in bind_remount_recursive_with_mountinfo()

We only use path-aware comparisons and hashops, hence no need to
simplify, we can use the path as it is.

(cherry picked from commit c6111b85f77fa6207c0ac50a99cf5d05c2aa33c9)

4 years agomount-until: make sure we'll exit bind_remount_recursive_with_mountinfo() loop eventually
Lennart Poettering [Wed, 24 Mar 2021 12:47:17 +0000 (13:47 +0100)]
mount-until: make sure we'll exit bind_remount_recursive_with_mountinfo() loop eventually

Just some robustness given that /proc/self/mountinfo was previously
broken in the kernel.

(cherry picked from commit 670e8efd6083bfef6186d33fa3b7dc90810d14ca)

4 years agomountpoint-util: rebreak some comments
Lennart Poettering [Tue, 23 Mar 2021 21:28:16 +0000 (22:28 +0100)]
mountpoint-util: rebreak some comments

(cherry picked from commit 9d0619dee729b9b481efa512295cf70cb5887fe1)

4 years agomountpoint-util: a symlink is never a mount point
Lennart Poettering [Tue, 23 Mar 2021 21:26:06 +0000 (22:26 +0100)]
mountpoint-util: a symlink is never a mount point

The various flavours of stat() basically tell us for free if something
is a symlink. If it is, then it's definitely not a mount point. Use
that.

All other inode types can be mount point, just symlinks cannot.

(cherry picked from commit b898474fecda9e39aa06512ef7ba358c9685d84e)

4 years agotest: drop log_trace() in test-random-util v248.1
Yu Watanabe [Wed, 5 May 2021 18:47:58 +0000 (03:47 +0900)]
test: drop log_trace() in test-random-util

It provides almost no inoformation. Moreover, it massively increases
logs, and firefox cannot show the results of Ubuntu CIs due to this.

(cherry picked from commit 3d396b2837445cf2fbe00c12aed2d9967d9e9d23)

4 years agosd-device: reject empty driver name
Zbigniew Jędrzejewski-Szmek [Wed, 5 May 2021 15:02:49 +0000 (17:02 +0200)]
sd-device: reject empty driver name

If ":" was the last char in the string, we would call access() on ".../drivers/", which
would pass. It probably doesn't matter, but let's reject this anyway.

(cherry picked from commit 52a89a5f08230439f07c043d59ded1270842137b)

4 years agosd-device: use memdupa_suffix0() where appropriate
Zbigniew Jędrzejewski-Szmek [Wed, 5 May 2021 14:57:39 +0000 (16:57 +0200)]
sd-device: use memdupa_suffix0() where appropriate

No functional change intended.

(cherry picked from commit 3e2d0c6ab2abc0ab85440580931b2462bb73cfda)

4 years agosd-device: minor optimization for sd_device_new_from_device_id()
Yu Watanabe [Sun, 7 Mar 2021 06:24:15 +0000 (15:24 +0900)]
sd-device: minor optimization for sd_device_new_from_device_id()

(cherry picked from commit ff7a8d2938b24cb7ca7b69900395ecf837a43a23)

4 years agosd-device: do no allocate strings of unknown length on the stack
Zbigniew Jędrzejewski-Szmek [Wed, 5 May 2021 14:49:41 +0000 (16:49 +0200)]
sd-device: do no allocate strings of unknown length on the stack

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=33881.

Not only we would duplicate unknown input on the stack, we would do it
over and over. So let's first check that the input has reasonable length,
but also allocate just one fixed size buffer.

(cherry picked from commit e17c95af8e450caacde692875b30675cea75211f)

4 years agomeson: don't fail if latest tag's commit is signed
наб [Fri, 16 Apr 2021 11:00:37 +0000 (13:00 +0200)]
meson: don't fail if latest tag's commit is signed

Today this is v248 with 938bdfc0fa737d86eb3ecc70506e11e5f740e0dc, which,
if you don't know about the github webflow key fails to configure with
  meson.build:724:8: ERROR:  String "gpg: Signature made Tue 30 Mar 2021 22:59:02 CEST\ngpg:                using RSA key 4AEE18F83AFDEB23\ngpg: Can't check signature: No public key\n1617137942\n" cannot be converted to int
or, if you do, with
  meson.build:724:8: ERROR:  String 'gpg: Signature made Tue 30 Mar 2021 22:59:02 CEST\ngpg:                using RSA key 4AEE18F83AFDEB23\ngpg: Good signature from "GitHub (web-flow commit signing) <noreply@github.com>" [unknown]\ngpg: WARNING: This key is not certified with a trusted signature!\ngpg:          There is no indication that the signature belongs to the owner.\nPrimary key fingerprint: 5DE3 E050 9C47 EA3C F04A  42D3 4AEE 18F8 3AFD EB23\n1617137942\n' cannot be converted to int

(cherry picked from commit 2d945027244c02fab8d388353f034a2d82ca151b)

4 years agocore: remove spurious % in dump string
Zbigniew Jędrzejewski-Szmek [Wed, 7 Apr 2021 08:52:30 +0000 (10:52 +0200)]
core: remove spurious % in dump string

(cherry picked from commit 0f6bb1ed05ceba91d8529c74379613ec9ebf50dc)

4 years agocore: apply LogLevelMax to messages about units
Ryan Hendrickson [Fri, 30 Apr 2021 16:47:10 +0000 (12:47 -0400)]
core: apply LogLevelMax to messages about units

This commit applies the filtering imposed by LogLevelMax on a unit's
processes to messages logged by PID1 about the unit as well.

The target use case for this feature is a service that runs on a timer
many times an hour, where the system administrator decides that writing
a generic success message to the journal every few minutes or seconds
adds no diagnostic value and isn't worth the clutter or disk I/O.

(cherry picked from commit c2503e359a3a03b73acce0a92d27b1b8f54ff92c)

4 years agonetwork: can: do not warn if link does not exist anymore
Yu Watanabe [Thu, 29 Apr 2021 22:00:45 +0000 (07:00 +0900)]
network: can: do not warn if link does not exist anymore

(cherry picked from commit ed52cce33f588bbeb3d7f5d7f5e76a85cf6e4f89)

4 years agonetwork: drop duplicated link_up_can()
Yu Watanabe [Thu, 29 Apr 2021 21:57:15 +0000 (06:57 +0900)]
network: drop duplicated link_up_can()

(cherry picked from commit f282ce20aaa767f5395b065f2be587cdef3e5491)

4 years agosd-bus: fix vtable named argument logic
Yu Watanabe [Thu, 29 Apr 2021 19:00:02 +0000 (04:00 +0900)]
sd-bus: fix vtable named argument logic

Fixes #19468.

(cherry picked from commit c068a17f6a18d3ebfabe88fc49e24a923d0bdd0a)

4 years agoClarify that these values are in bytes
Steve Bonds [Thu, 25 Mar 2021 14:40:39 +0000 (07:40 -0700)]
Clarify that these values are in bytes

Similar to `ProcessSizeMax`. The defaults in percentages can be misunderstood to mean the values for these parameters will be in percentages.

(cherry picked from commit 88c2c8a0ba13de31061a22a352410c18ffacab9a)

4 years agoman: importd also provides the option of import-fs for machinectl (#19477)
syyhao1994 [Fri, 30 Apr 2021 07:55:50 +0000 (15:55 +0800)]
man: importd also provides the option of import-fs for machinectl (#19477)

(cherry picked from commit 96ae72ce1ad41674078e45b197df35ad18041dc2)

4 years agosystemd-coredump: Add conflict with shutdown.target
Alexander Sverdlin [Sun, 18 Apr 2021 23:53:45 +0000 (01:53 +0200)]
systemd-coredump: Add conflict with shutdown.target

Otherwise a coredump started at the inconvinient moment can stop
shutdown.target leaving the system in a halfway-down state:

Pulling in shutdown.target/start from systemd-poweroff.service/start
Added job shutdown.target/start to transaction.
...
Keeping job shutdown.target/start because of systemd-poweroff.service/start
...
[  OK  ] Stopped target Remote File Systems.
shutdown.target: starting held back, waiting for: systemd-networkd.socket
sysinit.target: stopping held back, waiting for: remount_tmp.service
systemd-coredump.socket: Incoming traffic
...
systemd-coredump@0-243-0.service: Trying to enqueue job systemd-coredump@0-243-0.service/start/replace
Added job systemd-coredump@0-243-0.service/start to transaction.
Pulling in systemd-journald.socket/start from systemd-coredump@0-243-0.service/start
Added job systemd-journald.socket/start to transaction.
Pulling in system.slice/start from systemd-journald.socket/start
Added job system.slice/start to transaction.
Pulling in -.slice/start from system.slice/start
Added job -.slice/start to transaction.
Pulling in system-systemd\x2dcoredump.slice/start from systemd-coredump@0-243-0.service/start
Added job system-systemd\x2dcoredump.slice/start to transaction.
Pulling in system.slice/start from system-systemd\x2dcoredump.slice/start
Pulling in shutdown.target/stop from system-systemd\x2dcoredump.slice/start
Added job shutdown.target/stop to transaction.
...
Keeping job systemd-poweroff.service/stop because of umount.target/stop
Keeping job shutdown.target/stop because of systemd-coredump@0-243-0.service/start

(cherry picked from commit 4e947bd04944e58df4103eee4cb8180b5008f143)

4 years agonetwork: dhcp4: downgrade log level when interface is removed
Yu Watanabe [Wed, 28 Apr 2021 15:07:09 +0000 (00:07 +0900)]
network: dhcp4: downgrade log level when interface is removed

(cherry picked from commit e558d4f47a9c01b007fc193cabcf0dea8370a5f1)

4 years agonetwork: drop meaningless bitfield specifiers
Yu Watanabe [Mon, 26 Apr 2021 14:55:09 +0000 (23:55 +0900)]
network: drop meaningless bitfield specifiers

(cherry picked from commit 4cbd379e018c15d2369287adee59d1484eaedcc4)

4 years agoset boot time from monotonic time (#19444)
caoxia2008cxx [Thu, 29 Apr 2021 09:05:01 +0000 (17:05 +0800)]
set boot time from monotonic time (#19444)

utmp: calculate boot timestamp from monotonic timestamp instead of realtime timestamp
(cherry picked from commit f813b62316395205f4c744cde43885081b5f88ae)

4 years agonetwork: ndisc: fix ipv6 route preference for routes with Gateway=_ipv6ra
Yu Watanabe [Wed, 28 Apr 2021 13:26:48 +0000 (22:26 +0900)]
network: ndisc: fix ipv6 route preference for routes with Gateway=_ipv6ra

(cherry picked from commit 086a351ad9c39f49d050822b28e22aa461edec29)

4 years agonetwork: neighbor: downgrade log level
Yu Watanabe [Wed, 28 Apr 2021 13:18:45 +0000 (22:18 +0900)]
network: neighbor: downgrade log level

As commented in the code, kernel sends messages about neighbors after
a link is removed.

(cherry picked from commit 27a213392f642fdd2a9dbce914bbfda9a72aafc1)

4 years agonetwork: link: downgrade log level
Yu Watanabe [Wed, 28 Apr 2021 13:17:39 +0000 (22:17 +0900)]
network: link: downgrade log level

The error is harmless, and will be ignored. Let's downgrade log level.

(cherry picked from commit 83e7c37b19bd36c78b235ac3047b758fcf82ad78)

4 years agonetwork: neighbor: Always add neighbors with replace
William A. Kennington III [Tue, 27 Apr 2021 08:25:58 +0000 (01:25 -0700)]
network: neighbor: Always add neighbors with replace

We were duplicating setting flags for the message and a combination of
NLM_F_APPEND and NLM_F_CREATE which does not make sense. We should have
been using NLM_F_REPLACE and NLM_F_CREATE since the kernel can
dynamically create neighbors prior to us adding an entry. Otherwise, we
can end up with cases where the message will time out after ~25s even
though the neighbor still gets added. This delays the rest of the setup
of the interface even though the error is ultimately ignored.

(cherry picked from commit 192a9d95ea3e058afd824d38a9cea16ad0a84a57)

4 years agosystem-conf: drop reference to ShutdownWatchdogUsec=
Franck Bui [Tue, 27 Apr 2021 08:59:24 +0000 (10:59 +0200)]
system-conf: drop reference to ShutdownWatchdogUsec=

Commit 65224c1d0e50667a87c2c4f840c49d4918718f80 renamed ShutdownWatchdogUsec
into RebootWatchdogUsec but left a reference of ShutdownWatchdogUsec in
system.conf.

(cherry picked from commit 45b1fc3a88b2f5102ecabfabdf0ee4f175aecd64)

4 years agosystemctl: hide some empty properties without --all
Frantisek Sumsal [Mon, 26 Apr 2021 20:03:19 +0000 (22:03 +0200)]
systemctl: hide some empty properties without --all

Fixes: #19423
(cherry picked from commit 1ceaad69378272c64da4ecaab0d59ebb7a92ca0a)

4 years agotest-unit-serialize: add a very basic test that command deserialization works
Zbigniew Jędrzejewski-Szmek [Fri, 23 Apr 2021 10:37:09 +0000 (12:37 +0200)]
test-unit-serialize: add a very basic test that command deserialization works

We should test both serialization and deserialization works properly.
But the serialization/deserialization code is deeply entwined with the
manager state, and I think quite a bit of refactoring will be required before
this is possible. But let's at least add this simple test for now.

(cherry picked from commit 35243b77360c9cc7d1446617fe4fd304bfdecd4c)

4 years agocore/service: also reject deserialized commands with no argv[0]
Zbigniew Jędrzejewski-Szmek [Fri, 23 Apr 2021 10:40:07 +0000 (12:40 +0200)]
core/service: also reject deserialized commands with no argv[0]

I'm pretty sure that bad things would happen later on.

(cherry picked from commit 90204792461030dbc8645d8511e7ac8d1b4f1ca2)

4 years agocore/service: fix deserialization of non-absolute commands
Zbigniew Jędrzejewski-Szmek [Fri, 23 Apr 2021 10:39:03 +0000 (12:39 +0200)]
core/service: fix deserialization of non-absolute commands

We'd fail with:
Apr 23 10:58:26 systemd[1]: Deserializing state...
Apr 23 10:58:26 systemd[1]: testsuite-01.service: Failed to parse serialized command "ExecStart 0 sh "sh" "-e" "-x" "-c" "systemctl --state=failed --no-legend --no-pager >/failed ; systemctl daemon-reload ; echo OK >/testok"": Invalid argument
Apr 23 10:58:26 systemd[1]: testsuite-01.service: Reinstalled deserialized job testsuite-01.service/start as 209

This was missed in 5008da1ec1, and apparently nobody noticed until now :(

(cherry picked from commit 1a128a468ddd1070651478c36eae76e31f580b67)

4 years agonetwork: update comment and log message
Yu Watanabe [Mon, 26 Apr 2021 00:03:33 +0000 (09:03 +0900)]
network: update comment and log message

After 4b30f2e135ee84041bb597edca7225858f4ef4fb, reading stable_secret
sysctl property fails with -ENOMEM, instead of -EIO.
This is due to read_full_virtual_file() uses read() as the backend while
read_one_line_file() uses fgetc(). And each functions return different
error on fails.

Anyway, the failure is harmless here. So, the log message and comment is
updated.

Closes one of the issues in #19410.

(cherry picked from commit 0e27527170aa0179f2a4b3b55b78ddc049f815b9)

4 years agocore: allow services stuck in reloading state to exit
Peter Morrow [Tue, 13 Apr 2021 16:20:42 +0000 (17:20 +0100)]
core: allow services stuck in reloading state to exit

If a service is in reloading state but has exited do not delay
the final exit until the service reload timer expires. Instead allow
the service to exit immediately since we can't expect the service to
ever transition out of reloading state.

For example if a service sent RELOADING=1 but crashed before it could
send READY=1 then it should be restarted if the service had
Restart= configured.

Signed-off-by: Peter Morrow <pemorrow@linux.microsoft.com>
(cherry picked from commit bbe19f68846bb3cd5fcf3e4f612268064df53b53)

4 years agofix: point to the correct drop-ins subdirectory for confs
Jóhann B. Guðmundsson [Wed, 21 Apr 2021 21:09:29 +0000 (21:09 +0000)]
fix: point to the correct drop-ins subdirectory for confs

(cherry picked from commit eb34cce1787259de4cea1430fa017b6bd25bc4c1)

4 years agojournald: Retry if posix_fallocate returned -1 (EINTR)
Igor Zhbanov [Tue, 20 Apr 2021 17:22:28 +0000 (17:22 +0000)]
journald: Retry if posix_fallocate returned -1 (EINTR)

On some conditions (particularly when mobile CPUs are going to sleep),
the posix_fallocate(), which is called when a new journal file is allocated,
can return -1 (EINTR). This is counted as a fatal error. So the journald
closes both old and journals, and simply throwing away further incoming
events, because of no log files open.

Introduce posix_fallocate_loop() that restarts the function in the case
of EINTR. Also let's make code base more uniform by returning negative
values on error.

Fix assert in test-sigbus.c that incorrectly counted positive values as
success. After changing the function return values, that will actually work.

Fixes: #19041

Signed-off-by: Igor Zhbanov <i.zhbanov@omprussia.ru>
(cherry picked from commit 4c54768c9732532f4e56eab1be3e5474769e0d7a)

4 years agoman: dedent examples in sd-id128 to 2 columns
Zbigniew Jędrzejewski-Szmek [Mon, 19 Apr 2021 13:09:22 +0000 (15:09 +0200)]
man: dedent examples in sd-id128 to 2 columns

In man pages, horizontal space it at premium, and everything should
generally be indented with 2 spaces to make it more likely that the
examples fit on a user's screen.

C.f. 798d3a524ea57aaf40cb53858aaa45ec702f012d.

(cherry picked from commit e0a41aa4c6674f04723388c05b7cd81cc2ffd613)

4 years agojournald: enforce longer line length limit during "setup" phase of stream protocol
Yangyang Shen [Wed, 24 Mar 2021 13:23:01 +0000 (21:23 +0800)]
journald: enforce longer line length limit during "setup" phase of stream protocol

This PR made modification on Lennart Poettering's basis. Fix the LineMax's function failure problem.

Signed-off-by: Yangyang Shen <shenyangyang4@huawei.com>
(cherry picked from commit 80e9720616df0eeaba75874fd86fbfbe8b7a03a7)

4 years agosd-device: use right clock when comparing initialization usec
Lennart Poettering [Tue, 20 Apr 2021 13:56:03 +0000 (15:56 +0200)]
sd-device: use right clock when comparing initialization usec

we actually use CLOCK_MONOTONIC for the timestamp, hence when
comparing/subtracting it from the current time, also use
CLOCK_MONOTONIC.

(cherry picked from commit 02ef01ade3b16c05dfc8698181d7f562f4934ef3)

4 years agosd-device: use right type for usec_initialized
Lennart Poettering [Tue, 20 Apr 2021 15:06:21 +0000 (17:06 +0200)]
sd-device: use right type for usec_initialized

(cherry picked from commit a156eb89c827206ee5b51d53016ba63be0c90449)

4 years agodocument DefaultOOMPolicy
Miroslav Suchý [Tue, 20 Apr 2021 08:23:01 +0000 (10:23 +0200)]
document DefaultOOMPolicy

the `man systemd.service` say:
   Defaults to the setting DefaultOOMPolicy= in systemd-system.conf(5) is set to
but there is no such line in this config.
This is the default value I extracted from
   systemctl show --property=DefaultOOMPolicy

(cherry picked from commit 0084d4f6b58f70c9955fa2259c29d65d87e1e855)

4 years agowifi-util: do not set zero errno to log_debug_errno()
Yu Watanabe [Tue, 20 Apr 2021 00:23:33 +0000 (09:23 +0900)]
wifi-util: do not set zero errno to log_debug_errno()

(cherry picked from commit 66205cb3f597e43c8446d122fa4cc849c4f101d7)

4 years agomount-util: make umount_and_rmdir_and_freep() cleanup handler deal with NULL
Lennart Poettering [Mon, 19 Apr 2021 20:50:32 +0000 (22:50 +0200)]
mount-util: make umount_and_rmdir_and_freep() cleanup handler deal with NULL

(cherry picked from commit 4d686e6b0b12ffe9a1104ac23fee97c0de8a0730)

4 years agodissect: ext4 and loopback files are unimpressed by read-only access
Lennart Poettering [Mon, 19 Apr 2021 20:47:33 +0000 (22:47 +0200)]
dissect: ext4 and loopback files are unimpressed by read-only access

Even if we set up a loopback device read-only and mount it read-only
this means nothing, ext4 will still write through to the backing storage
file.

Yes, I lost 6h debugging time on this.

Apparently, we have to specify "norecovery" when mounting such file
systems, to force them into truly read-only mode. Let's do so.

(cherry picked from commit b620bf332f575ba9b8e4cd60c93446a0c35c23e8)

4 years agorepart: deal with empty partition label sensibly
Lennart Poettering [Fri, 19 Mar 2021 21:45:15 +0000 (22:45 +0100)]
repart: deal with empty partition label sensibly

libfdisk appears to return NULL when encountering an empty partition
label, let's handle this sanely, and treat NULL and "" for the current
label as the same, but for the new label as distinct: there NULL means
nothing is set, and "" means an actual empty label.

(cherry picked from commit be9ce0188ebb414319f0c003f805ea02b5eb473e)