}
#ifdef HAVE_STRUCT_BPF_CGROUP_DEV_CTX
- ret = bpf_program_cgroup_detach(handler->conf->cgroup2_devices);
+ ret = bpf_program_cgroup_detach(handler->cgroup_ops->cgroup2_devices);
if (ret < 0)
WARN("Failed to detach bpf program from cgroup");
#endif
return log_error_errno(false, ENOMEM, "Failed to attach bpf program");
/* Replace old bpf program. */
- devices_old = move_ptr(conf->cgroup2_devices);
- conf->cgroup2_devices = move_ptr(devices);
+ devices_old = move_ptr(ops->cgroup2_devices);
+ ops->cgroup2_devices = move_ptr(devices);
devices = move_ptr(devices_old);
#endif
return true;
prog->attached_path);
}
- free(prog->attached_path);
- prog->attached_path = NULL;
+ TRACE("Detached bpf program from cgroup %s", prog->attached_path);
+ free_disarm(prog->attached_path);
- return 0;
+ return 0;
}
-void lxc_clear_cgroup2_devices(struct lxc_conf *conf)
+void bpf_device_program_free(struct cgroup_ops *ops)
{
- if (conf->cgroup2_devices) {
- (void)bpf_program_cgroup_detach(conf->cgroup2_devices);
- (void)bpf_program_free(conf->cgroup2_devices);
+ if (ops->cgroup2_devices) {
+ (void)bpf_program_cgroup_detach(ops->cgroup2_devices);
+ (void)bpf_program_free(ops->cgroup2_devices);
+ ops->cgroup2_devices = NULL;
}
}
#include <sys/types.h>
#include <unistd.h>
+#include "cgroup.h"
#include "compiler.h"
#include "conf.h"
#include "config.h"
uint32_t flags);
__hidden extern int bpf_program_cgroup_detach(struct bpf_program *prog);
__hidden extern void bpf_program_free(struct bpf_program *prog);
-__hidden extern void lxc_clear_cgroup2_devices(struct lxc_conf *conf);
+__hidden extern void bpf_device_program_free(struct cgroup_ops *ops);
__hidden extern bool bpf_devices_cgroup_supported(void);
static inline void __auto_bpf_program_free__(struct bpf_program **prog)
{
}
-static inline void lxc_clear_cgroup2_devices(struct lxc_conf *conf)
+static inline void bpf_device_program_free(struct cgroup_ops *ops)
{
}
__do_bpf_program_free struct bpf_program *devices = NULL;
struct lxc_cmd_rsp rsp = {0};
struct lxc_conf *conf = handler->conf;
- struct hierarchy *unified = handler->cgroup_ops->unified;
+ struct cgroup_ops *cgroup_ops = handler->cgroup_ops;
+ struct hierarchy *unified = cgroup_ops->unified;
int ret;
struct lxc_list *it;
struct device_item *device;
goto respond;
/* Replace old bpf program. */
- devices_old = move_ptr(conf->cgroup2_devices);
- conf->cgroup2_devices = move_ptr(devices);
+ devices_old = move_ptr(cgroup_ops->cgroup2_devices);
+ cgroup_ops->cgroup2_devices = move_ptr(devices);
devices = move_ptr(devices_old);
rsp.ret = 0;
#include "af_unix.h"
#include "caps.h"
#include "cgroup.h"
-#include "cgroup2_devices.h"
#include "conf.h"
#include "config.h"
#include "confile.h"
lxc_clear_cgroups(conf, "lxc.cgroup", CGROUP_SUPER_MAGIC);
lxc_clear_cgroups(conf, "lxc.cgroup2", CGROUP2_SUPER_MAGIC);
lxc_clear_devices(conf);
- lxc_clear_cgroup2_devices(conf);
lxc_clear_hooks(conf, "lxc.hook");
lxc_clear_mount_entries(conf);
lxc_clear_idmaps(conf);
struct {
struct lxc_list cgroup;
struct lxc_list cgroup2;
- struct bpf_program *cgroup2_devices;
/* This should be reimplemented as a hashmap. */
struct lxc_list devices;
};