]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
4 years agotest: add a test for parsing xml obtained by DBus Introspect method 20973/head
Yu Watanabe [Sun, 10 Oct 2021 12:28:18 +0000 (21:28 +0900)] 
test: add a test for parsing xml obtained by DBus Introspect method

4 years agobusctl: add missing header
Yu Watanabe [Sun, 10 Oct 2021 12:15:04 +0000 (21:15 +0900)] 
busctl: add missing header

4 years agobusctl: shorten code a bit
Yu Watanabe [Sun, 10 Oct 2021 10:18:08 +0000 (19:18 +0900)] 
busctl: shorten code a bit

4 years agobusctl: use set_ensure_consume()
Yu Watanabe [Sun, 10 Oct 2021 10:10:56 +0000 (19:10 +0900)] 
busctl: use set_ensure_consume()

4 years agoMerge pull request #20915 from bluca/libsystemd_openssl
Luca Boccassi [Sat, 9 Oct 2021 17:37:59 +0000 (18:37 +0100)] 
Merge pull request #20915 from bluca/libsystemd_openssl

libsystemd/sd-id128: use only internal hmac, remove khash/OpenSSL support

4 years agotest: set 5 minute timeout on TEST-11-ISSUE-3166 and TEST-50-DISSECT
Dimitri John Ledkov [Fri, 8 Oct 2021 11:50:13 +0000 (12:50 +0100)] 
test: set 5 minute timeout on TEST-11-ISSUE-3166 and TEST-50-DISSECT

When they work they finish quickly in under two minutes on slow machines, when
soft lock ups happen in the nested virt machine each test can run for like 5
hours clogging up CI infrastructure. It's best to fail quicker than that when
qemu or kernel are broken.

4 years agotree-wide: assorted Coccinelle fixes
Frantisek Sumsal [Fri, 8 Oct 2021 09:53:23 +0000 (11:53 +0200)] 
tree-wide: assorted Coccinelle fixes

It's that time of year again.

4 years agoAdd benchmark for sha256 calculations 20915/head
Zbigniew Jędrzejewski-Szmek [Fri, 8 Oct 2021 07:35:50 +0000 (09:35 +0200)] 
Add benchmark for sha256 calculations

4 years agotest-id128: split into functions and add the usual headers
Zbigniew Jędrzejewski-Szmek [Fri, 8 Oct 2021 07:29:47 +0000 (09:29 +0200)] 
test-id128: split into functions and add the usual headers

4 years agobasic: remove khash helpers
Luca Boccassi [Thu, 7 Oct 2021 20:49:19 +0000 (21:49 +0100)] 
basic: remove khash helpers

No longer used anywhere. So long, and thanks for all the hashes!

4 years agolibsystemd/sd-id128: use only internal hmac, remove khash/OpenSSL support
Luca Boccassi [Thu, 30 Sep 2021 10:01:45 +0000 (11:01 +0100)] 
libsystemd/sd-id128: use only internal hmac, remove khash/OpenSSL support

Using OpenSSL brings in an additional dependency for all users of
libsystemd.so even though it's just one API that makes use of it.

The khash implementation is awkward as it requires context switches and
computation inside the kernel, thus leaving the process.

Remove both from libsystemd.so, and use exclusively the internal hmac fallback.
While this is not optimized, the sd-id128 API is not used in
performance-critical contexts where hardware acceleration would make a
noticeable difference.

4 years agobasic: add hmac_sha256 implementation
Luca Boccassi [Thu, 7 Oct 2021 20:02:44 +0000 (21:02 +0100)] 
basic: add hmac_sha256 implementation

Based on the FIPS 198 specification. Not optimized and probably
completely unsafe, to be used only for non-strong-cryptographic
purposes when OpenSSL cannot be used.

4 years agoboot/sha256: sd-ify and move to src/fundamental
Luca Boccassi [Thu, 7 Oct 2021 16:15:32 +0000 (17:15 +0100)] 
boot/sha256: sd-ify and move to src/fundamental

4 years agofundamental: define size_t and memcpy for sd-boot
Luca Boccassi [Fri, 8 Oct 2021 12:06:51 +0000 (13:06 +0100)] 
fundamental: define size_t and memcpy for sd-boot

4 years agoMerge pull request #20962 from poettering/dttoif
Lennart Poettering [Fri, 8 Oct 2021 09:14:03 +0000 (11:14 +0200)] 
Merge pull request #20962 from poettering/dttoif

Some tweaks to dirent-util.c

4 years agodirent-util: tweak readdir_ensure_type() a bit 20962/head
Lennart Poettering [Thu, 7 Oct 2021 20:58:43 +0000 (22:58 +0200)] 
dirent-util: tweak readdir_ensure_type() a bit

So far we ignored if readdir_ensure_type() failed, the .d_type would
then still possibly report DT_UNKNOWN, possibly confusing the caller.

Let's make this safer: if we get an error on readdir_ensure_type() then
report it — except if it is ENOENT which indicates the dirent vanished
by now, which is not a problem and we should just skip to the next
entry.

4 years agodirent-util: use statx() in readdir_ensure_type()
Lennart Poettering [Thu, 7 Oct 2021 20:55:20 +0000 (22:55 +0200)] 
dirent-util: use statx() in readdir_ensure_type()

Let's ask exactly for the one field we actually want to know, i.e.
STATX_TYPE.

(While we are at it, also copy over the inode number, if we have it,
simply to report the most recent info we have)

(Also, see AT_NO_AUTOMOUNT, so that we don't trigger automounts here.
After all, if we want to know the inode type of a dirent here, then
there's not need to trigger the automount, the inode type is not going
to change by that.)

4 years agodirent-util: get rid of stat_mode_to_dirent_type()
Lennart Poettering [Thu, 7 Oct 2021 20:23:35 +0000 (22:23 +0200)] 
dirent-util: get rid of stat_mode_to_dirent_type()

Apparently glibc already has a helper for this. (Not in the man pages
for Linux, but FreeBSD does document these cryptic helpers, and its
exported by glibc. That should be good enough for us.)

4 years agodissect: print more useful error messages for two more error cases
Lennart Poettering [Thu, 7 Oct 2021 12:14:02 +0000 (14:14 +0200)] 
dissect: print more useful error messages for two more error cases

4 years agocoredump: Add --all option
Daan De Meyer [Wed, 6 Oct 2021 12:47:46 +0000 (13:47 +0100)] 
coredump: Add --all option

This option has coredumpctl look at all journals instead of only the
local ones. This allows coredumpctl to show information about remote
coredumps if the coredumps are made available in /var/lib/systemd/coredump
and the corresponding journals are made available in /var/log/journal.

This is already possible using the --directory option but --all makes it
more user friendly since users don't have to enter the journal directory
anymore as long as it's available under /var/log/journal.

4 years agoMerge pull request #20910 from poettering/nftw-no-more
Lennart Poettering [Thu, 7 Oct 2021 20:12:41 +0000 (22:12 +0200)] 
Merge pull request #20910 from poettering/nftw-no-more

basic: add recurse_dir() function as modern replacement for nftw()

4 years agonetwork: assert on dereferenced pointer
Luca Boccassi [Thu, 7 Oct 2021 12:34:42 +0000 (13:34 +0100)] 
network: assert on dereferenced pointer

CID#1462762

4 years agoMerge pull request #20778 from yuwata/network-ipv6-token
Yu Watanabe [Thu, 7 Oct 2021 14:24:00 +0000 (23:24 +0900)] 
Merge pull request #20778 from yuwata/network-ipv6-token

network: rework IPv6 address generation mode

4 years agohomed: typo fix
Lennart Poettering [Mon, 4 Oct 2021 21:44:19 +0000 (23:44 +0200)] 
homed: typo fix

4 years agoupdate TODO
Lennart Poettering [Mon, 4 Oct 2021 08:31:04 +0000 (10:31 +0200)] 
update TODO

4 years agoMerge pull request #20948 from poettering/cgls-xattr
Lennart Poettering [Thu, 7 Oct 2021 13:25:03 +0000 (15:25 +0200)] 
Merge pull request #20948 from poettering/cgls-xattr

cgls: show cgroup id and xattr info in output

4 years agoupdate TODO 20910/head
Lennart Poettering [Fri, 1 Oct 2021 13:56:54 +0000 (15:56 +0200)] 
update TODO

4 years agomount-setup: port from nftw() to recurse_dir()
Lennart Poettering [Fri, 1 Oct 2021 13:56:27 +0000 (15:56 +0200)] 
mount-setup: port from nftw() to recurse_dir()

4 years agokbd-util: port from nftw() to recurse_dir()
Lennart Poettering [Fri, 1 Oct 2021 13:55:53 +0000 (15:55 +0200)] 
kbd-util: port from nftw() to recurse_dir()

4 years agocgroup-util: port from nftw() to recurse_dir()
Lennart Poettering [Fri, 1 Oct 2021 13:55:37 +0000 (15:55 +0200)] 
cgroup-util: port from nftw() to recurse_dir()

4 years agokmod-setup: port from nftw() to recurse_dir()
Lennart Poettering [Fri, 1 Oct 2021 13:55:16 +0000 (15:55 +0200)] 
kmod-setup: port from nftw() to recurse_dir()

4 years agotests: add test for recurse_dir()
Lennart Poettering [Fri, 1 Oct 2021 14:36:21 +0000 (16:36 +0200)] 
tests: add test for recurse_dir()

4 years agobasic: add new recurse_dir() tool as replacement for nftw()
Lennart Poettering [Fri, 1 Oct 2021 13:49:25 +0000 (15:49 +0200)] 
basic: add new recurse_dir() tool as replacement for nftw()

libc nftw() shows its age a bit, let's replace it with a more moden
infra that is built around openat(), O_PATH, statx(). This makes the
interface less prone to races and cleans up the API a bit adding
substantially more functionality.

4 years agotree-wide: remove a few unnecessary inclusions of ftw.h
Lennart Poettering [Fri, 1 Oct 2021 13:48:23 +0000 (15:48 +0200)] 
tree-wide: remove a few unnecessary inclusions of ftw.h

4 years agofileio: add shortcut for xopendirat() when called in opendir() compatible mode
Lennart Poettering [Fri, 1 Oct 2021 13:47:53 +0000 (15:47 +0200)] 
fileio: add shortcut for xopendirat() when called in opendir() compatible mode

4 years agodirent-util: split out new function stat_mode_to_dirent_type()
Lennart Poettering [Fri, 1 Oct 2021 13:46:42 +0000 (15:46 +0200)] 
dirent-util: split out new function stat_mode_to_dirent_type()

This contains the mapping between mode_t inode type flags and dirent's
d_type. Splitting this out allows us to use the mapping elsewhere later.

4 years agobash-completion: add the two new switches to systemd-cgls 20948/head
Lennart Poettering [Thu, 7 Oct 2021 09:46:10 +0000 (11:46 +0200)] 
bash-completion: add the two new switches to systemd-cgls

(completion hookup for zsh doesn't appear to exist, hence not adding
there.)

4 years agoman: document the two new switches for systemd-cgls
Lennart Poettering [Wed, 6 Oct 2021 15:12:26 +0000 (17:12 +0200)] 
man: document the two new switches for systemd-cgls

4 years agocgls: enable cgroupid/xattr output by default (but make it configurable)
Lennart Poettering [Wed, 6 Oct 2021 15:07:43 +0000 (17:07 +0200)] 
cgls: enable cgroupid/xattr output by default (but make it configurable)

4 years agocgroups-show: optionally show cgroup xattrs + cgroup id in cgroup tree output
Lennart Poettering [Wed, 6 Oct 2021 15:06:50 +0000 (17:06 +0200)] 
cgroups-show: optionally show cgroup xattrs + cgroup id in cgroup tree output

4 years agocgroups-show: use path_join() when concatenating cgroup paths
Lennart Poettering [Wed, 6 Oct 2021 15:06:05 +0000 (17:06 +0200)] 
cgroups-show: use path_join() when concatenating cgroup paths

4 years agocgroups-show: validate specified hostname before including it in fs path
Lennart Poettering [Wed, 6 Oct 2021 15:04:16 +0000 (17:04 +0200)] 
cgroups-show: validate specified hostname before including it in fs path

let's make sure the specified hostname is really valid before we build
an fs path from it. Just as a safety future, so that people can't trick
us with hostnames including "/../" or so.

4 years agocgroup-util: add reusable union type for cgroupfs file_handle structs
Lennart Poettering [Wed, 6 Oct 2021 15:02:08 +0000 (17:02 +0200)] 
cgroup-util: add reusable union type for cgroupfs file_handle structs

That way we can easily call name_to_handle_at() on cgroupfs2 elsewhere.

4 years agoxattr-util: merge various getxattr()/listxattr() helpers into getxattr_at_malloc...
Lennart Poettering [Wed, 6 Oct 2021 14:31:49 +0000 (16:31 +0200)] 
xattr-util: merge various getxattr()/listxattr() helpers into getxattr_at_malloc() + listxattr_at_malloc()

Unfortunately fgetxattr() and flistxattr() don't work via O_PATH fds.
Let's thus add fallbacks to go via /proc/self/fd/ in these cases.

Also, let's merge all the various flavours we have here into singular
implementations that can do everything we need:

1. malloc() loop handling
2. by fd, by path, or combination (i.e. a proper openat() like API)
3. work on O_PATH

4 years agotest: make OpenSSL checks optional in TEST-50-DISSECT
Luca Boccassi [Wed, 6 Oct 2021 23:26:26 +0000 (00:26 +0100)] 
test: make OpenSSL checks optional in TEST-50-DISSECT

If the packages are built without libssl simply skip the signature
checks.

Oct 06 21:21:32 H systemd[1]: systemd 249.1249.gcc4df1f787.0 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS -OPENSSL
...
Oct 06 21:22:21 H systemd[459]: Activation of signed Verity volume worked neither via the kernel nor in userspace, can't activate.

Follow-up for #20691

4 years agoMerge pull request #20926 from yuwata/udev-net-wol-sopass
Luca Boccassi [Wed, 6 Oct 2021 22:36:05 +0000 (23:36 +0100)] 
Merge pull request #20926 from yuwata/udev-net-wol-sopass

udev/net: introduce WakeOnLanPassword=

4 years agotest: test udev with a _very_ long device name
Frantisek Sumsal [Fri, 1 Oct 2021 11:56:25 +0000 (13:56 +0200)] 
test: test udev with a _very_ long device name

Let's attempt to provide some coverage for #16161, #6867, and similar.

4 years agocoredump: Don't log an error if D-Bus isn't running
Daan De Meyer [Wed, 6 Oct 2021 12:20:36 +0000 (13:20 +0100)] 
coredump: Don't log an error if D-Bus isn't running

coredumpctl could be used in a chroot where D-Bus isn't running. If
that's the case, we shouldn't consider it an error if we can't connect
to the D-Bus daemon so let's reduce the severity of the error we log
when we can't connect to D-Bus because the socket doesn't exist.

4 years agoMerge pull request #20935 from unusual-thoughts/fix-empty-argv
Yu Watanabe [Wed, 6 Oct 2021 16:53:51 +0000 (01:53 +0900)] 
Merge pull request #20935 from unusual-thoughts/fix-empty-argv

Fix #20933

4 years agoudev/net: introduce WakeOnLanPassword= 20926/head
Yu Watanabe [Wed, 6 Oct 2021 12:49:58 +0000 (21:49 +0900)] 
udev/net: introduce WakeOnLanPassword=

Closes #20913.

4 years agotest-network: add tests for Token= in [IPv6Prefix] 20778/head
Yu Watanabe [Fri, 17 Sep 2021 12:55:32 +0000 (21:55 +0900)] 
test-network: add tests for Token= in [IPv6Prefix]

4 years agotest-network: replace deprecated settings
Yu Watanabe [Fri, 17 Sep 2021 12:55:00 +0000 (21:55 +0900)] 
test-network: replace deprecated settings

4 years agonetwork: make generate_eui64_address() static
Yu Watanabe [Fri, 24 Sep 2021 19:12:53 +0000 (04:12 +0900)] 
network: make generate_eui64_address() static

4 years agonetwork: introduce Token= setting in [IPv6Prefix]
Yu Watanabe [Fri, 24 Sep 2021 19:12:31 +0000 (04:12 +0900)] 
network: introduce Token= setting in [IPv6Prefix]

Closes #20149.

4 years agonetwork: extend Token= setting in [DHCPv6PrefixDelegation]
Yu Watanabe [Fri, 24 Sep 2021 19:10:34 +0000 (04:10 +0900)] 
network: extend Token= setting in [DHCPv6PrefixDelegation]

Now the setting supports the same syntax as the one in the [IPv6AcceptRA]
section.

4 years agonetwork: introduce Token=eui64
Yu Watanabe [Fri, 24 Sep 2021 19:04:09 +0000 (04:04 +0900)] 
network: introduce Token=eui64

So, now user can explicitly request EUI-64 algorithm to generate addresses.

4 years agonetwork: rename IPv6Token= in [Network] -> Token= in [IPv6AcceptRA]
Yu Watanabe [Fri, 24 Sep 2021 19:52:47 +0000 (04:52 +0900)] 
network: rename IPv6Token= in [Network] -> Token= in [IPv6AcceptRA]

The token is only used by received prefixes through RA.

4 years agonetwork: address-genereation: introduce generate_addresses()
Yu Watanabe [Fri, 1 Oct 2021 12:36:32 +0000 (21:36 +0900)] 
network: address-genereation: introduce generate_addresses()

Preparation for later commits. This does not change functionality.

4 years agonetwork: address-generation: use in6_addr_hash_ops_free
Yu Watanabe [Fri, 1 Oct 2021 12:34:59 +0000 (21:34 +0900)] 
network: address-generation: use in6_addr_hash_ops_free

Also, downgrade error level, and caller logs the error.

4 years agonetwork: address-generation: modernize config_parse_address_generation_type()
Yu Watanabe [Fri, 1 Oct 2021 12:23:56 +0000 (21:23 +0900)] 
network: address-generation: modernize config_parse_address_generation_type()

- drop unused _NONE type,
- rename IPv6Token::prefix -> IPv6Token::address,
- clear unused part of IPv6Token::address,
- use Set, instead of OrderedSet.

4 years agonetwork: address-generation: mask prefix with prefixlen for safety
Yu Watanabe [Fri, 1 Oct 2021 12:19:51 +0000 (21:19 +0900)] 
network: address-generation: mask prefix with prefixlen for safety

4 years agonetwork: address-generation: always start DAD counter from zero
Yu Watanabe [Fri, 1 Oct 2021 11:57:59 +0000 (20:57 +0900)] 
network: address-generation: always start DAD counter from zero

The token is stored in Network, and the .network file may be applied to
multiple links.

4 years agonetwork: address-generation: always use the first 64 bits of the prefix
Yu Watanabe [Fri, 1 Oct 2021 12:03:05 +0000 (21:03 +0900)] 
network: address-generation: always use the first 64 bits of the prefix

Hopefully, the prefix length is usually 64.

Previously, if the prefix length is smaller than 64, the result address
was undefined.

4 years agonetwork: ndisc: ignore autonomous prefix with prefix length larger than 64
Yu Watanabe [Fri, 1 Oct 2021 11:37:56 +0000 (20:37 +0900)] 
network: ndisc: ignore autonomous prefix with prefix length larger than 64

4 years agonetwork: radv: ignore Assign= if prefixlen is larger than 64
Yu Watanabe [Fri, 1 Oct 2021 08:59:56 +0000 (17:59 +0900)] 
network: radv: ignore Assign= if prefixlen is larger than 64

4 years agonetwork: make generate_ipv6_eui_64_address() take prefix
Yu Watanabe [Fri, 1 Oct 2021 08:58:38 +0000 (17:58 +0900)] 
network: make generate_ipv6_eui_64_address() take prefix

Also, rename the function.

4 years agonetwork: fix prefixlen for reserved subnet anycast address
Yu Watanabe [Fri, 1 Oct 2021 08:18:30 +0000 (17:18 +0900)] 
network: fix prefixlen for reserved subnet anycast address

Then, the prefixlen is not a multiplier of 8, we need to use
in6_addr_prefix_covers().

This also constify the reserved addresses, and rename macros.

4 years agonetwork: move address generation methods to network-address-generation.[ch]
Yu Watanabe [Fri, 1 Oct 2021 07:44:25 +0000 (16:44 +0900)] 
network: move address generation methods to network-address-generation.[ch]

4 years agoin-addr-util: introduce in{4,6}_addr_prefix_covers()
Yu Watanabe [Fri, 1 Oct 2021 08:42:31 +0000 (17:42 +0900)] 
in-addr-util: introduce in{4,6}_addr_prefix_covers()

4 years agoin-addr-util: do not shift 8 or more for uint8_t
Yu Watanabe [Fri, 1 Oct 2021 08:35:04 +0000 (17:35 +0900)] 
in-addr-util: do not shift 8 or more for uint8_t

See ISO/IEC 9899:TC3 § 6.5.7.3.

4 years agoin-addr-util: introduce in{4,6}_addr_mask()
Yu Watanabe [Fri, 17 Sep 2021 12:38:00 +0000 (21:38 +0900)] 
in-addr-util: introduce in{4,6}_addr_mask()

4 years agoin-addr-util: introduce in6_addr_hash_ops_free
Yu Watanabe [Fri, 17 Sep 2021 12:11:50 +0000 (21:11 +0900)] 
in-addr-util: introduce in6_addr_hash_ops_free

4 years agonetwork: radv: reorder functions
Yu Watanabe [Fri, 17 Sep 2021 11:54:47 +0000 (20:54 +0900)] 
network: radv: reorder functions

In other files, we usually (but not always) place functions in the following order:
- network_adjust_xxx(), which applies default or updates settings
  specified in .network files,
- link_xxx_enabled(), which checks if the functionality is enabled,
- xxx_new() and xxx_free(), allocator and deallocator for sections,
- functions which apply/update/remove configs
- validators of section,
- conf parsers.

This does not change each function, but just changes the order.

4 years agoMerge pull request #18145 from kinvolk/iaguis/lsm-bpf
Lennart Poettering [Wed, 6 Oct 2021 14:23:27 +0000 (16:23 +0200)] 
Merge pull request #18145 from kinvolk/iaguis/lsm-bpf

Add RestrictFileSystems= property using LSM BPF

4 years agouser-record: disable two pbkdf fields that don't apply for pkbdf2
Lennart Poettering [Tue, 5 Oct 2021 16:24:05 +0000 (18:24 +0200)] 
user-record: disable two pbkdf fields that don't apply for pkbdf2

Fixes: #20830
4 years agoethtool-util: make ethtool_set_wol() take password
Yu Watanabe [Wed, 6 Oct 2021 12:49:39 +0000 (21:49 +0900)] 
ethtool-util: make ethtool_set_wol() take password

4 years agoethtool-util: do not try to enable unsupported WoL options
Yu Watanabe [Wed, 6 Oct 2021 12:44:02 +0000 (21:44 +0900)] 
ethtool-util: do not try to enable unsupported WoL options

4 years agoethtool-util: make wol_options_to_string() not return all flag strings
Yu Watanabe [Tue, 5 Oct 2021 05:59:26 +0000 (14:59 +0900)] 
ethtool-util: make wol_options_to_string() not return all flag strings

4 years agoUpdate 60-sensor.hwdb
chlorophyll-zz [Tue, 5 Oct 2021 03:24:20 +0000 (05:24 +0200)] 
Update 60-sensor.hwdb

#20287 was wrong.
Y Axis was only reversed on Arch Linux because of a problem with iio-sensor-proxy
This restores before the patch.

4 years agocore/service: also check path in exec commands 20935/head
Yu Watanabe [Tue, 5 Oct 2021 15:19:41 +0000 (00:19 +0900)] 
core/service: also check path in exec commands

4 years agoman: add discussion of read-only filesystem support in daemons
Zbigniew Jędrzejewski-Szmek [Sun, 3 Oct 2021 08:49:40 +0000 (10:49 +0200)] 
man: add discussion of read-only filesystem support in daemons

This is inspired by https://bugzilla.redhat.com/show_bug.cgi?id=1853293.  Let's
mention that applications should be prepared for /var being read-only.

4 years agoman: document systemd-analyze filesystems 18145/head
Iago López Galeiras [Mon, 8 Feb 2021 14:10:13 +0000 (15:10 +0100)] 
man: document systemd-analyze filesystems

4 years agoanalyze: add filesystems command
Iago López Galeiras [Mon, 8 Feb 2021 14:07:19 +0000 (15:07 +0100)] 
analyze: add filesystems command

4 years agoREADME: document LSM BPF requirements
Iago López Galeiras [Tue, 22 Dec 2020 19:27:50 +0000 (20:27 +0100)] 
README: document LSM BPF requirements

4 years agotest: add test-bpf-lsm
Iago López Galeiras [Fri, 11 Dec 2020 16:32:54 +0000 (17:32 +0100)] 
test: add test-bpf-lsm

4 years agoman: document EXIT_BPF status
Iago López Galeiras [Mon, 8 Feb 2021 14:06:29 +0000 (15:06 +0100)] 
man: document EXIT_BPF status

4 years agoman: add RestrictFileSystems= documentation
Iago López Galeiras [Mon, 8 Feb 2021 14:06:22 +0000 (15:06 +0100)] 
man: add RestrictFileSystems= documentation

4 years agomkosi: add libbpf dependency
Iago López Galeiras [Fri, 11 Dec 2020 12:03:54 +0000 (13:03 +0100)] 
mkosi: add libbpf dependency

For distros that ship libbpf >=0.2.0.

4 years agocore: add dbus RestrictFileSystems= properties
Iago López Galeiras [Fri, 11 Dec 2020 12:20:23 +0000 (13:20 +0100)] 
core: add dbus RestrictFileSystems= properties

4 years agocore: add RestrictFileSystems= fragment parser
Iago López Galeiras [Thu, 11 Feb 2021 15:59:30 +0000 (16:59 +0100)] 
core: add RestrictFileSystems= fragment parser

It takes an allow or deny list of filesystems services should have
access to.

4 years agocore: use LSM BPF functions to implement RestrictFileSystems=
Iago Lopez Galeiras [Tue, 5 Oct 2021 11:18:49 +0000 (13:18 +0200)] 
core: use LSM BPF functions to implement RestrictFileSystems=

It attaches the LSM BPF program when the system manager starts up.

It populates the hash of maps BPF map when services that have
RestrictFileSystems= set start.

It cleans up the hash of maps when the unit cgroup is pruned.

To pass the file descriptor of the BPF map we add it to the keep_fds
array.

4 years agocore: add BPF LSM functions
Iago Lopez Galeiras [Tue, 13 Jul 2021 07:51:06 +0000 (09:51 +0200)] 
core: add BPF LSM functions

This adds 6 functions to implement RestrictFileSystems=

* lsm_bpf_supported() checks if LSM BPF is supported. It checks that
  cgroupv2 is used, that BPF LSM is enabled, and tries to load the BPF
  LSM program which makes sure BTF and hash of maps are supported, and
  BPF LSM programs can be loaded.
* lsm_bpf_setup() loads and attaches the LSM BPF program.
* lsm_bpf_unit_restrict_filesystems() populates the hash of maps BPF map with the
  cgroupID and the set of allowed or denied filesystems.
* lsm_bpf_cleanup() removes a cgroupID entry from the hash of maps.
* lsm_bpf_map_restrict_fs_fd() is a helper function to get the file
  descriptor of the BPF map.
* lsm_bpf_destroy() is a wrapper around the destroy function of the BPF
  skeleton file.

4 years agoshared/bpf-dlopen: expose more libbpf functions
Iago López Galeiras [Mon, 12 Jul 2021 10:18:31 +0000 (12:18 +0200)] 
shared/bpf-dlopen: expose more libbpf functions

They're needed for the LSM BPF feature.

4 years agoexit-status: add EXIT_BPF
Iago López Galeiras [Fri, 11 Dec 2020 12:24:13 +0000 (13:24 +0100)] 
exit-status: add EXIT_BPF

It will be used later.

4 years agocgroup-util: add cg_path_get_cgroupid()
Iago López Galeiras [Fri, 11 Dec 2020 12:15:25 +0000 (13:15 +0100)] 
cgroup-util: add cg_path_get_cgroupid()

It returns the cgroupID from a cgroup path.

4 years agobpf: add restrict_fs BPF program
Iago López Galeiras [Fri, 11 Dec 2020 11:40:33 +0000 (12:40 +0100)] 
bpf: add restrict_fs BPF program

It hooks into the file_open LSM hook and allows only when the filesystem
where the open will take place is present in a BPF map for a particular
cgroup.

The BPF map used is a hash of maps with the following structure:

    cgroupID -> (s_magic -> uint32)

The inner map is effectively a set.

The entry at key 0 in the inner map encodes whether the program behaves
as an allow list or a deny list: if its value is 0 it is a deny list,
otherwise it is an allow list.

When the cgroupID is present in the map, the program checks the inner
map for the magic number of the filesystem associated with the file
that's being opened. When the program behaves as an allow list, if that
magic number is present it allows the open to succeed, when the program
behaves as a deny list, it only allows access if the that magic number
is NOT present. When access is denied the program returns -EPERM.

The BPF program uses CO-RE (Compile-Once Run-Everywhere) to access
internal kernel structures without needing kernel headers present at
runtime.

4 years agobasic: use filesystem database
Iago López Galeiras [Mon, 8 Feb 2021 14:14:20 +0000 (15:14 +0100)] 
basic: use filesystem database

4 years agobasic: add filesystem database
Iago López Galeiras [Mon, 8 Feb 2021 18:54:24 +0000 (19:54 +0100)] 
basic: add filesystem database

Stores filesystem_name -> magic_number(s).

4 years agomissing_magic: add several filesystems
Iago López Galeiras [Mon, 8 Feb 2021 17:32:22 +0000 (18:32 +0100)] 
missing_magic: add several filesystems

They were failing on CI.

4 years agobasic: move CIFS magic number to missing_magic.h
Iago Lopez Galeiras [Thu, 19 Aug 2021 09:26:49 +0000 (11:26 +0200)] 
basic: move CIFS magic number to missing_magic.h

It fits better there.