summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulia Kartseva <hex@fb.com>2021-11-04 18:52:02 -0700
committerJulia Kartseva <hex@fb.com>2021-11-10 21:00:25 -0800
commit084d0849fc864b0377551b211def7a89b642c5e9 (patch)
tree0181bf3ed82d01aee639a0a6669f611b0d399863
parenta704137c20fcde3fa9077832d9ee29b89d6217e5 (diff)
downloadsystemd-084d0849fc864b0377551b211def7a89b642c5e9.tar.gz
core: fix bpf-foreign cg controller realization
Requiring /sys/fs/bpf path to be a mount point at the moment of cgroup controllers realization does more harm than good, because: * Realization happens early on boot, the mount point may not be ready at the time. That happens if mounts are made by a .mount unit (the issue we encountered). * BPF filesystem may be mounted on another point. Remove the check. Instead verify that path provided by BPFProgram= is within BPF fs when unit properties are parsed. Split in two commits for simple backport.
-rw-r--r--src/core/bpf-foreign.c10
-rw-r--r--src/core/bpf-foreign.h5
2 files changed, 4 insertions, 11 deletions
diff --git a/src/core/bpf-foreign.c b/src/core/bpf-foreign.c
index 6b93b9785f..686c14ce1f 100644
--- a/src/core/bpf-foreign.c
+++ b/src/core/bpf-foreign.c
@@ -111,16 +111,6 @@ static int bpf_foreign_prepare(
return 0;
}
-int bpf_foreign_supported(void) {
- int r;
-
- r = cg_all_unified();
- if (r <= 0)
- return r;
-
- return path_is_mount_point("/sys/fs/bpf", NULL, 0);
-}
-
int bpf_foreign_install(Unit *u) {
_cleanup_free_ char *cgroup_path = NULL;
CGroupBPFForeignProgram *p;
diff --git a/src/core/bpf-foreign.h b/src/core/bpf-foreign.h
index 9559cd7981..e387b1b1d3 100644
--- a/src/core/bpf-foreign.h
+++ b/src/core/bpf-foreign.h
@@ -4,7 +4,10 @@
#include "unit.h"
-int bpf_foreign_supported(void);
+static inline int bpf_foreign_supported(void) {
+ return cg_all_unified();
+}
+
/*
* Attach cgroup-bpf programs foreign to systemd, i.e. loaded to the kernel by an entity
* external to systemd.