mirror of
https://github.com/systemd/systemd
synced 2026-04-12 18:14:51 +02:00
Compare commits
4 Commits
cd933f14bd
...
299d941723
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
299d941723 | ||
|
|
2bdd2e7ac9 | ||
|
|
23126a7b9b | ||
|
|
788c2d9523 |
@ -176,7 +176,7 @@ int lsm_bpf_supported(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int lsm_bpf_setup(Manager *m) {
|
int lsm_bpf_setup(Manager *m) {
|
||||||
struct restrict_fs_bpf *obj;
|
_cleanup_(restrict_fs_bpf_freep) struct restrict_fs_bpf *obj = NULL;
|
||||||
_cleanup_(bpf_link_freep) struct bpf_link *link = NULL;
|
_cleanup_(bpf_link_freep) struct bpf_link *link = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -186,17 +186,16 @@ int lsm_bpf_setup(Manager *m) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
m->restrict_fs = obj;
|
link = sym_bpf_program__attach_lsm(obj->progs.restrict_filesystems);
|
||||||
|
|
||||||
link = sym_bpf_program__attach_lsm(m->restrict_fs->progs.restrict_filesystems);
|
|
||||||
r = sym_libbpf_get_error(link);
|
r = sym_libbpf_get_error(link);
|
||||||
if (r != 0)
|
if (r != 0)
|
||||||
return log_error_errno(r, "Failed to link '%s' LSM BPF program: %m",
|
return log_error_errno(r, "Failed to link '%s' LSM BPF program: %m",
|
||||||
sym_bpf_program__name(m->restrict_fs->progs.restrict_filesystems));
|
sym_bpf_program__name(obj->progs.restrict_filesystems));
|
||||||
|
|
||||||
log_info("LSM BPF program attached");
|
log_info("LSM BPF program attached");
|
||||||
|
|
||||||
m->restrict_fs->links.restrict_filesystems = TAKE_PTR(link);
|
obj->links.restrict_filesystems = TAKE_PTR(link);
|
||||||
|
m->restrict_fs = TAKE_PTR(obj);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -210,6 +209,10 @@ int lsm_bpf_unit_restrict_filesystems(Unit *u, const Set *filesystems, bool allo
|
|||||||
assert(filesystems);
|
assert(filesystems);
|
||||||
assert(u);
|
assert(u);
|
||||||
|
|
||||||
|
if (!u->manager->restrict_fs)
|
||||||
|
return log_unit_error_errno(u, SYNTHETIC_ERRNO(EINVAL),
|
||||||
|
"Restrict filesystems BPF object is not set, BPF LSM setup has failed?");
|
||||||
|
|
||||||
int inner_map_fd = sym_bpf_create_map(
|
int inner_map_fd = sym_bpf_create_map(
|
||||||
BPF_MAP_TYPE_HASH,
|
BPF_MAP_TYPE_HASH,
|
||||||
sizeof(uint32_t),
|
sizeof(uint32_t),
|
||||||
|
|||||||
@ -1732,9 +1732,16 @@ static int apply_lock_personality(const Unit* u, const ExecContext *c) {
|
|||||||
|
|
||||||
#if HAVE_LIBBPF
|
#if HAVE_LIBBPF
|
||||||
static bool skip_lsm_bpf_unsupported(const Unit* u, const char* msg) {
|
static bool skip_lsm_bpf_unsupported(const Unit* u, const char* msg) {
|
||||||
|
assert(u);
|
||||||
|
assert(u->manager);
|
||||||
|
|
||||||
if (lsm_bpf_supported())
|
if (lsm_bpf_supported())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
/* lsm_bpf_setup succeeded */
|
||||||
|
if (u->manager->restrict_fs)
|
||||||
|
return false;
|
||||||
|
|
||||||
log_unit_debug(u, "LSM BPF not supported, skipping %s", msg);
|
log_unit_debug(u, "LSM BPF not supported, skipping %s", msg);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -933,7 +933,7 @@ int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager
|
|||||||
if (MANAGER_IS_SYSTEM(m) && lsm_bpf_supported()) {
|
if (MANAGER_IS_SYSTEM(m) && lsm_bpf_supported()) {
|
||||||
r = lsm_bpf_setup(m);
|
r = lsm_bpf_setup(m);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
log_warning_errno(r, "Failed to setup LSM BPF, ignoring: %m");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,7 +17,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
slow = slow_tests_enabled();
|
slow = slow_tests_enabled();
|
||||||
|
|
||||||
t = slow ? 10 * USEC_PER_SEC : 1 * USEC_PER_SEC;
|
t = slow ? 10 * USEC_PER_SEC : 2 * USEC_PER_SEC;
|
||||||
count = slow ? 5 : 3;
|
count = slow ? 5 : 3;
|
||||||
|
|
||||||
r = watchdog_setup(t);
|
r = watchdog_setup(t);
|
||||||
@ -27,12 +27,13 @@ int main(int argc, char *argv[]) {
|
|||||||
t = 0;
|
t = 0;
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
|
t = watchdog_runtime_wait();
|
||||||
|
log_info("Sleeping " USEC_FMT " microseconds...", t);
|
||||||
|
usleep(t);
|
||||||
log_info("Pinging...");
|
log_info("Pinging...");
|
||||||
r = watchdog_ping();
|
r = watchdog_ping();
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_warning_errno(r, "Failed to ping watchdog: %m");
|
log_warning_errno(r, "Failed to ping watchdog: %m");
|
||||||
|
|
||||||
usleep(t/2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
watchdog_close(true);
|
watchdog_close(true);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user