Commit Graph
37496 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek 29f604131b kernel-install: add missing log line 2022-01-28 16:17:47 +01:00
Zbigniew Jędrzejewski-Szmek 367165a406 kernel-install: add "$KERNEL_INSTALL_STAGING_AREA" directory
The general approach of kernel-install was that each plugin would drop in some
files into the entry directory. But this doesn't scale well, because if we have
multiple initrd generators, or multiple initrds, each generator would need to
recreate the logic to put the generated files in the right place.

Also, effective cleanup is impossible if anything goes wrong on the way, so we
could end up with unused files in $BOOT.

So let's invert the process: plugins drop files into $KERNEL_INSTALL_STAGING_AREA,
and at the end 90-loaderentry.install DTRT with those files.

This allow new plugins like 50-mkosi-initrd.install to be significantly simpler.
2022-01-28 16:17:47 +01:00
Zbigniew Jędrzejewski-Szmek 680cec6b4d kernel-install: prefix errors with "Error:", exit immediately
kernel-install would continue after errors… We don't want this, as it
makes the results totally unpredicatable. If we didn't install the kernel
or didn't do some important part of the setup, let's just return an error
and let the user deal with it.

When looking at output, the error was often hard to distinguish, esp.
with -v. Add "Error:" everywhere to make the output easier to parse.
2022-01-28 16:17:47 +01:00
Zbigniew Jędrzejewski-Szmek a520d5dddb kernel-install: k-i already creates $ENTRY_DIR_ABS, no need to do it again 2022-01-28 16:17:45 +01:00
Yu Watanabe 372c6c7028 test: add missing oom check
Fixes CID#1469129.
2022-01-28 12:56:29 +00:00
Daan De Meyer 639fda6f1a Merge pull request #22283 from yuwata/sd-device-suppress-log
sd-device: suppress log
2022-01-28 12:55:16 +00:00
Yu Watanabe 71df50a973 sd-dhcp-server: refuse too large packet to send
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=44134.
2022-01-28 10:22:53 +00:00
Yu Watanabe 1a054a208c network: fix log messages 2022-01-28 08:34:57 +00:00
Julia Kartseva e0c694c73d bpf: load firewall with name only if supported
BPF firewall is supported starting from v4.9 kernel where
BPF_PROG_TYPE_SOCKET_FILTER support was added [0].

However, program name support was added to v4.15 [1] and BPF_PROG_LOAD
syscall will fail on older kernels if called with prog_name attribute.
BPF_F_ALLOW_MULTI was also added to v4.15 kernel which allows reusing
BPF_F_ALLOW_MULTI probe to indicate that program name is also supported.

It is no problem for BPF_PROG_TYPE_CGROUP_DEVICE since it was added in
v4.15.

[0] https://elixir.bootlin.com/linux/v4.9/source/include/uapi/linux/bpf.h#L92
[1] https://elixir.bootlin.com/linux/v4.15/source/include/uapi/linux/bpf.h#L191

Follow-up of https://github.com/systemd/systemd/pull/22214
2022-01-28 12:42:18 +09:00
Yu Watanabe 673a181702 Merge pull request #22272 from bluca/state_dir_private_rootfs
core: do not attempt to add 'private' symlinks when RootImage/RootDirectory are used
2022-01-28 12:04:41 +09:00
Yu Watanabe 29fafedd39 sd-device: suppress too many debugging log when enumerating devices
Follow-up for d7cb60daf6.
2022-01-28 10:58:15 +09:00
Yu Watanabe 68a2ed61eb log: introduce log_trace_errno() 2022-01-28 10:50:36 +09:00
Luca Boccassi 3fa80e5e75 core: do not attempt to add 'private' symlinks when RootImage/RootDirectory are used
A bind mount is added directly from private on the host to the actual
destination directory, no need for the symlinks (which cannot be created
as the bind mount happens first and creates the target as an actual directory)

Fixes https://github.com/systemd/systemd/issues/22264
2022-01-28 00:54:10 +00:00
Yu Watanabe a5e2a488e8 resolve: llmnr: fix never hit condition
Previously, the condition in on_stream_io_impl() never hit, as the
read packet is always taken from the stream in the few lines above.

Instead of the dns_stream_complete() under the condition, the stream
is unref()ed in the on_packet callback for LLMNR stream, unlike the
other on_packet callbacks.

That's quite tricky. Also, potentially, the stream may still have
queued packets to write.

This fix the condition, and drops the unref() in the on_packet callback.

C.f. https://github.com/systemd/systemd/pull/22274#issuecomment-1023708449.

Closes #22266.
2022-01-28 09:37:50 +09:00
Yu Watanabe 4aa6129897 resolve: mention that dns_stream_update() needs to be called after dns_stream_take_read_packet()
Based on the analysis by Joan Bruguera <joanbrugueram@gmail.com>.
See https://github.com/systemd/systemd/pull/22132#discussion_r793951650.
2022-01-28 09:01:07 +09:00
Yu Watanabe 624f907ea9 resolve: call dns_stream_take_read_packet() in on_stream_io()
As dns_stream_take_read_packet() is called only in on_packet callbacks,
and all on_packet callbacks call it.
2022-01-28 09:00:56 +09:00
Yu Watanabe 18230451c0 resolve: make dns_stream_new() take on_packet and complete callbacks
And make on_packet callback mandatory.
2022-01-28 08:45:17 +09:00
Yu Watanabe e6d31fc97a tree-wide: fix typo 2022-01-28 04:47:39 +09:00
Yu Watanabe 33db66aa36 Merge pull request #22132 from joanbm/main
resolved: Fix DoT timeout on multiple answer records (for CloudFlare, Google, etc. DoT servers)
2022-01-28 04:23:34 +09:00
Yu Watanabe d5dd3c26eb Merge pull request #22262 from DaanDeMeyer/journal-fixes
Journal fixes
2022-01-28 04:15:11 +09:00
Daan De Meyer d93abf465b journal: Truncate file instead of punching hole in final object
Instead of punching a hole in the final object if it's an entry array,
let's just truncate the file instead.
2022-01-27 15:21:37 +00:00
Daan De Meyer 3a787b5e29 journal: stat journal file after truncating
Let's make sure the data stored in last_stat is up-to-date after
truncating the journal file.
2022-01-27 14:46:59 +00:00
Luca Boccassi 6d7c999ab5 core: add clearer debug log when setting up ExecDirectories symlinks fails 2022-01-27 14:21:29 +00:00
Yu Watanabe 2a97a4b374 test: initialize buffer to make Coverity silent
Follow-up for f82f0b9937.

Fixes CID#1469119.
2022-01-27 13:47:58 +00:00
Yu Watanabe a21440f6d6 Merge pull request #22259 from bluca/exec_cond_restart
core: do not restart a service with Restart=always when ExecCondition fails
2022-01-27 15:09:47 +09:00
Joan Bruguera 726bcd81b9 resolved: Test for DnsStream (plain TCP DNS and DoT)
Tests DnsStream event handling, both for plain TCP DNS and DNS over TLS.

The DoT test requires the "openssl s_server" command line tool to mock a simple
TLS server. Thus the test's TLS part is skipped if openssl it not available.
The test works for both DNS_OVER_TLS_USE_GNUTLS and DNS_OVER_TLS_USE_OPENSSL.

The DoT case fails due to a bug, which is fixed on the next commit.
2022-01-27 14:33:56 +09:00
Joan Bruguera 2aaf6bb6e9 resolved: Fix DoT timeout on multiple answer records
When sending multiple DNS questions to a DNS-over-TLS server (e.g. a question
for A and AAAA records, as is typical) on the same session, the server may
answer to each question in a separate TLS record, but it may also aggregate
multiple answers in a single TLS record.
(Some servers do this very often (e.g. Cloudflare 1.0.0.1), some do it sometimes
(e.g. Google 8.8.8.8) and some seem to never do it (e.g. Quad9 9.9.9.10)).

Both cases should be handled equivalently, as the byte stream is the same, but
when multiple answers came in a single TLS record, usually the first answer was
processed, but the second answer was entirely ignored, which caused a 10s delay
until the resolution timed out and the missing question was retried.
This can be reproduced by configuring one of the offending server and running
`resolvectl query google.com --cache=no` a few times.

To be notified of incoming data, systemd-resolved listens to `EPOLLIN` events
on the underlying socket. However, when DNS-over-TLS is used, the TLS library
(OpenSSL or GnuTLS) may read and buffer the entire TLS record when reading the
first answer, so usually no further `EPOLLIN` events will be generated, and the
second answer will never be processed.

To avoid this, if there's buffered TLS data, generate a "fake" EPOLLIN event.
This is hacky, but it makes this case transparent to the rest of the IO code.
2022-01-27 14:33:28 +09:00
Arfrever Frehtes Taifersar Arahesis a42a93830f logind.conf: Fix name of option: RuntimeDirectoryInodes -> RuntimeDirectoryInodesMax 2022-01-27 14:04:44 +09:00
Evgeny Vereshchagin b28d06e059 tests: fuzz dhcp_server_relay_message
It's a follow-up to https://github.com/systemd/systemd/pull/19384 where
dhcp_server_relay_message was introduced.

This PR was prompted by https://github.com/systemd/systemd/pull/22236#issuecomment-1020113269
for the most part.
2022-01-27 13:49:36 +09:00
Anita Zhang 1d3b68f6e1 tree-wide: don't use strjoina() on getenv() values
Avoid doing stack allocations on environment variables.
2022-01-27 13:45:00 +09:00
Daan De Meyer 8bad545354 journal: Stop comparing hash values from entry items against data objects
These checks don't achieve anything of value. Assuming they were added to
check for corruption, they don't actually achieve this goal since other parts
of the data object can still get corrupted and we wouldn't notice unless we'd
recalculate the hash every time.

In theory, we could use the entry item hash to avoid a random access lookup
for the data object hash in the journal file in the future to speed up searching,
but for finding all entry objects containing a specific data objects, we already
have entry arrays per data object to get fast access to this information.

This means that duplicating the hashes in the entry item doesn't result in any
added value. In this commit, we remove the checks so that in future commits we
can remove the hashes from the journal file format in the new compact mode.
2022-01-26 20:16:00 +00:00
Daan De Meyer c710944c83 journal: Inline loop variable 2022-01-26 20:16:00 +00:00
Daan De Meyer 578cd1855b journal: Invert verify entry <=> data consistency checks
Previously, for each entry in a data object's entry array, we'd check
if one of that entry's entry items referred to the data object.

Instead, when verifying the main entry array, let's check if for each
entry item found by iterating the main entry array, the corresponding
data object's entry array refers to that entry.

This enables us to re-use more code from journal-file and turns out to
be roughly 10s faster when verifying my 4G laptop journal.

When verifying data objects, we still check if every entry in the data
object's entry array also exists in the main entry array so that we ensure
we're not missing any entries when iterating the main entry array.
2022-01-26 20:16:00 +00:00
Daan De Meyer df53536435 journal: Fail gracefully when linking a new entry
Let's always try to link all entry items even if linking one fails
due to not being able to allocate a new entry array. Other entry
items might still be successfully linked if the entry array of the
corresponding data object isn't full yet.
2022-01-26 20:16:00 +00:00
Daan De Meyer 910eb3c063 journal: Use ret_offset everywhere in journal-file.h 2022-01-26 20:16:00 +00:00
Daan De Meyer ded10e3a5f journal: Only move to objects when necessary
Let's make sure we only move to objects when it's required. If "ret"
is NULL, the caller isn't interested in the actual object and the
function being called shouldn't move to it unless it has to
inspect/modify the object itself.
2022-01-26 20:16:00 +00:00
Daan De Meyer ec50313d4e journal: Pass data objects to journal_file_move_to_entry_..._for_data() functions
This reduces the number of calls to journal_file_move_to_object() which are heavy.
All call sites have easy access to the data object so this change doesn't end up
complicating things.
2022-01-26 20:16:00 +00:00
Daan De Meyer 57e97246cd journal: Log error when keyed hash env variable cannot be parsed 2022-01-26 20:16:00 +00:00
Daan De Meyer 3a8099a871 journal: Use offsetof(Object, ...) to retrieve object field offsets
We currently use both offsetof(Object, ...) and offsetof(DataObject, ...).
This makes it harder to grep for usages as we have to make sure we grep for
both usages. Let's unify these all to use offsetof(Object, ...) to make it
easier to grep for usages.
2022-01-26 20:16:00 +00:00
Luca Boccassi abb99360d3 core: do not restart a service with Restart=always when ExecCondition fails
When a Condition*= fails, and a service has Restart=always,
the service is not restarted.
Follow the same behaviour for ExecCondition= to avoid inconsistencies.

Fixes #22257
2022-01-26 19:02:11 +00:00
Jan Janssen 1926a11439 boot: Add screen resolution to print status 2022-01-26 18:07:00 +01:00
Jan Janssen c323c2f63c boot: Also NUL-terminate for CHAR16 in file_reaad 2022-01-26 18:07:00 +01:00
Jan Janssen 20a734726e boot: Use ASSERT_PTR 2022-01-26 18:07:00 +01:00
Jan Janssen 83d905b7b4 boot: Optimize unique title generation 2022-01-26 18:06:52 +01:00
Yu Watanabe 9d3bb25b2d Merge pull request #22252 from medhefgo/boot-build
meson: Boot build/test changes
2022-01-27 01:32:04 +09:00
Yu Watanabe 58ceeb844d Merge pull request #22249 from yuwata/wait-online-fix-unmanaged-state
wait-online: fix handling of unmanaged state
2022-01-27 01:17:12 +09:00
Daan De Meyer f82f0b9937 shared: Ensure COPY_HOLES copies trailing holes
Previously, files with a hole at the end would get silently truncated
which breaks reading journal files. This commit makes sure that holes
are punched in existing space and if no more space is available, that
we grow the file and the hole by using ftruncate().

The corresponding test is extended to put a hole at the end of the file
and we make sure that hole is copied correctly.
2022-01-27 01:15:22 +09:00
Yu Watanabe cd7fcda543 wait-online: make manager_link_is_online() return 0 when in unmanaged state
Previously, even if a link is in unmanaged state, the function may
returns positive value. So, even if all managed links are in the configured
sate but do not satisfy the online criteria, e.g., IPv4 address state,
then wait-online finishes with positive value.

This makes the function always return 0 for unmanaged state. So, at
least one managed link must satisfies the online criteria.

This also adds more comments and debugging logs.

Fixes #22246.
2022-01-26 22:41:47 +09:00
Yu Watanabe 5f200833ed wait-online: rename Manager elements 2022-01-26 22:41:47 +09:00
Jan Janssen 7afd0196b6 meson: Use --no-wchar-size-warning
This only disables the one warning that we care to ignore, making
sure that any future issues do not get masked.
2022-01-26 14:40:55 +01:00