bpf: simplify bpf (device) program freeing

parent 25903ba9
...@@ -71,8 +71,7 @@ void cgroup_exit(struct cgroup_ops *ops) ...@@ -71,8 +71,7 @@ void cgroup_exit(struct cgroup_ops *ops)
free_equal(ops->container_cgroup, ops->container_limit_cgroup); free_equal(ops->container_cgroup, ops->container_limit_cgroup);
if (ops->cgroup2_devices) bpf_device_program_free(ops);
bpf_program_free(ops->cgroup2_devices);
if (ops->dfd_mnt_cgroupfs_host >= 0) if (ops->dfd_mnt_cgroupfs_host >= 0)
close(ops->dfd_mnt_cgroupfs_host); close(ops->dfd_mnt_cgroupfs_host);
......
...@@ -60,17 +60,6 @@ static int bpf_program_add_instructions(struct bpf_program *prog, ...@@ -60,17 +60,6 @@ static int bpf_program_add_instructions(struct bpf_program *prog,
return 0; return 0;
} }
void bpf_program_free(struct bpf_program *prog)
{
if (!prog)
return;
(void)bpf_program_cgroup_detach(prog);
free(prog->instructions);
free(prog);
}
/* Memory load, dst_reg = *(uint *) (src_reg + off16) */ /* Memory load, dst_reg = *(uint *) (src_reg + off16) */
#define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \ #define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \
((struct bpf_insn){.code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \ ((struct bpf_insn){.code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \
...@@ -442,7 +431,7 @@ void bpf_device_program_free(struct cgroup_ops *ops) ...@@ -442,7 +431,7 @@ void bpf_device_program_free(struct cgroup_ops *ops)
{ {
if (ops->cgroup2_devices) { if (ops->cgroup2_devices) {
(void)bpf_program_cgroup_detach(ops->cgroup2_devices); (void)bpf_program_cgroup_detach(ops->cgroup2_devices);
(void)bpf_program_free(ops->cgroup2_devices); bpf_program_free(ops->cgroup2_devices);
ops->cgroup2_devices = NULL; ops->cgroup2_devices = NULL;
} }
} }
......
...@@ -88,7 +88,6 @@ __hidden extern int bpf_program_init(struct bpf_program *prog); ...@@ -88,7 +88,6 @@ __hidden extern int bpf_program_init(struct bpf_program *prog);
__hidden extern int bpf_program_append_device(struct bpf_program *prog, struct device_item *device); __hidden extern int bpf_program_append_device(struct bpf_program *prog, struct device_item *device);
__hidden extern int bpf_program_finalize(struct bpf_program *prog); __hidden extern int bpf_program_finalize(struct bpf_program *prog);
__hidden extern int bpf_program_cgroup_detach(struct bpf_program *prog); __hidden extern int bpf_program_cgroup_detach(struct bpf_program *prog);
__hidden extern void bpf_program_free(struct bpf_program *prog);
__hidden extern void bpf_device_program_free(struct cgroup_ops *ops); __hidden extern void bpf_device_program_free(struct cgroup_ops *ops);
__hidden extern bool bpf_devices_cgroup_supported(void); __hidden extern bool bpf_devices_cgroup_supported(void);
...@@ -100,6 +99,14 @@ __hidden extern bool bpf_cgroup_devices_update(struct cgroup_ops *ops, ...@@ -100,6 +99,14 @@ __hidden extern bool bpf_cgroup_devices_update(struct cgroup_ops *ops,
struct device_item *new, struct device_item *new,
struct lxc_list *devices); struct lxc_list *devices);
static inline void bpf_program_free(struct bpf_program *prog)
{
if (prog) {
(void)bpf_program_cgroup_detach(prog);
free(prog->instructions);
free(prog);
}
}
define_cleanup_function(struct bpf_program *, bpf_program_free); define_cleanup_function(struct bpf_program *, bpf_program_free);
#define __do_bpf_program_free call_cleaner(bpf_program_free) #define __do_bpf_program_free call_cleaner(bpf_program_free)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment