Commit Graph
4099 Commits
Author SHA1 Message Date
Lennart Poettering 7ecc424fbe alloc-util: drop double eval from free_and_replace()
Inspired by: 2744c7bb01
2021-07-29 21:12:58 +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
Zbigniew Jędrzejewski-Szmek cbcf371abc Add variant of close_all_fds() that does not allocate and use it in freeze()
Even though it's just a fallback path, let's not be sloppy and allocate in
the crash handler.

> The deadlock happens because systemd crash in malloc() then in signal
> handler, it calls malloc() (close_all_fds()-> opendir()-> __alloc_dir())
> again. malloc() is not a signal-safe function, maybe we should re-think
> the logic here.

Fixes #20266.
2021-07-23 11:39:45 +02:00
Zbigniew Jędrzejewski-Szmek 45a68ed307 Move freeze() into shared/
Library code should not call freeze(), this is something that should
only be done by "application code", so moving it into shared/ is appropriate.

The fallback to call _exit() is dropped: let's trust that the infinite loop
is infinite.
2021-07-23 11:39:45 +02:00
Zbigniew Jędrzejewski-Szmek 3e24e8cd64 Move fork_agent() into shared/
Currently it's only used in two places in src/shared/, so the function was
already included just once in compiled code. But it seems appropriate to
move it there anyway, because library code should have no need to fork
agents, so it doesn't belong in basic/.
2021-07-23 11:39:45 +02:00
Zbigniew Jędrzejewski-Szmek 3bd6a01c01 basic/process-util: use xsprintf() in one more place 2021-07-23 11:39:45 +02:00
Zbigniew Jędrzejewski-Szmek 6bf3c6c900 Make oom_score_adjust_is_valid() static
It has only one user and we don't need to put it in basic/.
2021-07-23 11:39:45 +02:00
Zbigniew Jędrzejewski-Szmek 9c46228b7d basic/fd-util: sort the 'except' array in place
We need a sorted list of fds to skip over when closing. We would allocate a
copy of the passed array to do the sort. But all callers construct a temporary
array to pass to us, so it is pointless to copy it again.

close_all_fds/safe_fork_full/namespace_fork/fork_agent are changed to pass
a non-const int array. I checked all users, and all callers are fine with
the array being sorted.

The function was returning some number (sometimes 1, sometimes the extent
of the range passed over to close_range(), ???). Anyway, all callers only
check for error, so let's return 0 on success.
2021-07-23 11:37:44 +02:00
Zbigniew Jędrzejewski-Szmek b34a4f0e67 Merge pull request #20256 from keszybz/one-alloca-too-many
basic/unit-name: do not use strdupa() on a path
2021-07-20 14:39:23 +02:00
Zbigniew Jędrzejewski-Szmek c543f4d7dd basic/time-util: inline one more variable declaration 2021-07-19 19:58:13 +02:00
Yu Watanabe e18f21e349 Merge pull request #20109 from keszybz/timestamp-macros
Add macros that define scratch buffer internally for timestamp/timespan formatting
2021-07-14 16:14:08 +09:00
Luca Boccassi af55491028 Merge pull request #20186 from keszybz/coverity-fixes
Coverity fixes
2021-07-09 21:15:08 +01:00
Frantisek Sumsal 2f0927626a tree-wide: coccinelle fixes
Yet another batch of Coccinelle fixes.
2021-07-09 20:54:22 +01:00
Luca Boccassi 5c8cf104e7 Merge pull request #20157 from keszybz/numerical-uids-in--M
Allow numerical UIDs in systemctl -M uid@ and similar
2021-07-09 16:58:45 +01:00
Zbigniew Jędrzejewski-Szmek bc1f27ff55 creds: drop unnecessary initialization
Coverity also thinks a leak happens here, CID #1458112.
This seems wrong, but let's add an assert, maybe that'll help.
2021-07-09 15:13:12 +02:00
Zbigniew Jędrzejewski-Szmek 1421705d9a core: drop unnecessary initialization
cunescape() sets output on success, so initialization is not necessary. There
was no comment, but I think they may have been added because the compiler
wasn't convinced that the return value is non-negative on success. It could
have been confused by the int return type on escape*(), which was changed by
the one of preceeding commits to ssize_t, or by the length calculation, so add
an assert to help the compiler.

For some reason coverity thinks the output can be leaked here (CID #1458111).
I don't see how.
2021-07-09 15:12:18 +02:00
Zbigniew Jędrzejewski-Szmek e437538f35 tree-wide: make cunescape*() functions return ssize_t
Strictly speaking, we are returning the size of a memory chunk of
arbitrary size, so ssize_t is more appropriate than int.
2021-07-09 15:07:40 +02:00
Zbigniew Jędrzejewski-Szmek ddedf7ca69 basic/escape: use _cleanup_ in one more place
Also, let's not use 'r' for a char*.
2021-07-09 15:07:13 +02:00
Zbigniew Jędrzejewski-Szmek eeb91d29b0 basic/escape: add helper for quoting command lines 2021-07-09 11:18:21 +02:00
Zbigniew Jędrzejewski-Szmek 12619d0a80 tree-wide: do not use (void) asprintf
asprintf(3) says that the pointer is "undefined" after a failed call.
In the current glibc implementation it is just NULL. In principle the
call could return a valid pointer with bad contents or something.

We have two styles of error handling: in a majority of cases we would
check the return value, but sometimes we used (void) and relied on the
pointer not being set. In practice both styles should be equivalent,
but gcc doesn't like the second one with -Wunused-result. (Though only
sometimes. E.g. on my F34 box I don't get the same warnings as in CI,
even though the compiler version is very similar and the compilation
options are the same…). It's also nice to be consistent in our code base.
So let's always use the first style of error checking.
2021-07-09 11:11:25 +02:00
Zbigniew Jędrzejewski-Szmek cb3e854fed basic/time-util: indentation 2021-07-09 11:11:25 +02:00
Zbigniew Jędrzejewski-Szmek 6c6368e938 basic/{time,format}-util: warn when format result is unused
Now that anonymous buffers are used in almost all cases, code which
does not use the return value is usually broken.
2021-07-09 11:11:25 +02:00
Zbigniew Jędrzejewski-Szmek 9ca7e3d00d Replace format_bytes_cgroup_protection with FORMAT_BYTES_CGROUP_PROTECTION 2021-07-09 11:11:25 +02:00
Zbigniew Jędrzejewski-Szmek 46e23f9a8d tree-wide: add FORMAT_BYTES_FULL() 2021-07-09 11:11:25 +02:00
Zbigniew Jędrzejewski-Szmek d3e4029457 basic/macro: make CONST_MAX(DECIMAL_STR_MAX(…), STRLEN(…)) possible
When those two macros were used together in CONST_MAX(), gcc would complain
about a type mismatch. So either DECIMAL_STR_MAX() should be made size_t like
STRLEN(), or STRLEN() be made unsigned.

Since those macros are only usable on arguments of (small) fixed size, any type
should be fine (even char would work…). For buffer size specifications, both
size_t and unsigned are OK. But unsigned was used for DECIMAL_STR_MAX macros
and FORMAT_foo_MAX macros, making STRLEN the only exception, so let's adjust
STRLEN() to be unsigned too.

Also: I don't think this is currently used anywhere, but if any of those macros
were used as an argument to sprintf, size_t would require a cast. ("%*s"
requires an int/unsigned argument.)
2021-07-09 11:11:25 +02:00
Zbigniew Jędrzejewski-Szmek 2b59bf51a0 tree-wide: add FORMAT_BYTES() 2021-07-09 11:11:21 +02:00
Zbigniew Jędrzejewski-Szmek 0086ef19cb tree-wide: add FORMAT_TIMESTAMP_STYLE() 2021-07-09 11:03:36 +02:00
Zbigniew Jędrzejewski-Szmek 32fc5c4763 tree-wide: add FORMAT_TIMESTAMP_RELATIVE() 2021-07-09 11:03:36 +02:00
Zbigniew Jędrzejewski-Szmek 5291f26d4a tree-wide: add FORMAT_TIMESPAN() 2021-07-09 11:03:36 +02:00
Zbigniew Jędrzejewski-Szmek ae7c644c22 basic/time-util: add FORMAT_TIMESTAMP
This uses the same idea of an anonyous buffer as ETHER_ADDR_TO_STR().
2021-07-09 11:03:35 +02:00
Zbigniew Jędrzejewski-Szmek e265fa8198 test-ether-addr-util: add a simple test that HW_ADDR_TO_STR works with nesting
It seems to, but I was a bit incredulous… The comment is adjusted to match
the standard.

The trick with a temporary buffer is neat. I wasn't sure if it is valid, but
the standard says so. The test really tests that we are reading the rules right
and that the compiler doesn't do anythign strange or emit an unexpected
warning.
2021-07-09 11:03:35 +02:00
Yu Watanabe d0e18bb4b0 Merge pull request #20166 from poettering/fsync-more
various tweaks to existing fsync() helpers, and some new apis
2021-07-09 07:32:01 +09:00
Yu Watanabe 452a07cfd6 Merge pull request #20168 from poettering/signal-util-tweak
generalize SIGINT handling in copy.c
2021-07-09 07:24:43 +09:00
Lennart Poettering 6a24c995f0 dirent-util: no need to bother with fstatat() for "." and ".." to figure out if these are dirs 2021-07-09 04:18:09 +09:00
Lennart Poettering 1053967781 path-util: make path_compare() accept NULL 2021-07-08 13:56:06 +02:00
Lennart Poettering 949162552d conf-files: rename return parameters ret_xyz 2021-07-08 13:06:58 +02:00
Lennart Poettering 0178ff292b signal-util: add helper pop_pending_signal() 2021-07-08 10:33:38 +02:00
Lennart Poettering 4050625e5b fs-util: teach syncfs_path() handle with empty path argument 2021-07-08 10:22:34 +02:00
Lennart Poettering 32a3041656 fs-util: add fsync_path_and_parent_at() 2021-07-08 10:22:34 +02:00
Lennart Poettering 814a7e0345 fs-util: add API for fsync()ing parent dir of path 2021-07-08 10:22:34 +02:00
Lennart Poettering 427c934fdb fs-util: make sure fsync_directory_of_file() does something useful on O_PATH fds
When handling O_PATH fds it's safe to use the parent of
/proc/self/fd/<fd> for any kind of inode. Hence do so.
2021-07-08 10:22:34 +02:00
Lennart Poettering 8f860b4df0 util: move src/basic/creds-util.[ch] → src/shared/
This is preparation for adding encryption support to the credentials
logic, and we thus would like to add more deps. Let's hence move things
from src/basic/ to src/shared, so that we can rely on the OpenSSL
utilities already in src/shared.
2021-07-08 09:30:18 +02:00
Lennart Poettering 82b4ec445b hexdecoct: optionally, line break base64 encoded data 2021-07-08 09:30:03 +02:00
Lennart Poettering 7b0da71d49 fileio: optionally allow interpreting file size as limit 2021-07-08 09:29:53 +02:00
Lennart Poettering c1631ee124 chattr-util: generalize chattr manipulation for files with secrets from journalctl
This moves the code for setting chattr file attributes appropriate for
"secrets" files from journalctl into generic chattr-util.c code so that
we can use it elsewhere.

Also, let's reuse the "bitwise" logic already implemented in the chattr
code, instead of doing it again.
2021-07-08 09:29:48 +02:00
Lennart Poettering 0c4d1e6d96 process-util: explicitly handle processes lacking parents in get_process_ppid()
Let's make sure we signal out-of-band via an error message if a process
doesn't have a parent process whose PID we could return. Otherwise we'll
too likely hide errors, as we return an invalid PID 0, which in other
contexts has special meaning (i.e. usually "myself").

Replaces: #20153

This is based on work by @dtardon, but goes a different route, by
ensuring we propagate a proper error in this case.

This modernizes the function in question a bit in other ways, i.e.
renames stuff and makes the return parameter optional.
2021-07-07 18:41:08 +01:00
Zbigniew Jędrzejewski-Szmek 8def4b347a basic/time-util: fix errno name
Fixup for bdaeafea5d. This was supposed to be
pushed in an updated version, but I forgot to stage the change.
2021-07-07 14:21:21 +02:00
Lennart Poettering 107e21635b hashmap: make sure hashmap_get_strv()+set_get_strv() work with a NULL object
Before we invoke n_entries() we need to check for non-NULL here, like in
all other calls to the helper function. Otherwise we'll crash when
invoked with a NULL object, which we usually consider equivalent to an
empty one though.
2021-07-02 22:32:19 +01:00
Anita Zhang e82acab4db oomd: review follow ups to #20020 2021-07-02 09:26:40 +02:00