From ad755295f15029e58e716412a88d6c8cb576c1a7 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Thu, 18 Feb 2021 16:26:16 +0100 Subject: [PATCH] bpf: simplify bpf (device) program freeing Signed-off-by: Christian Brauner --- src/lxc/cgroups/cgroup.c | 3 +-- src/lxc/cgroups/cgroup2_devices.c | 13 +------------ src/lxc/cgroups/cgroup2_devices.h | 9 ++++++++- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/lxc/cgroups/cgroup.c b/src/lxc/cgroups/cgroup.c index 775f79f62..d29aa483b 100644 --- a/src/lxc/cgroups/cgroup.c +++ b/src/lxc/cgroups/cgroup.c @@ -71,8 +71,7 @@ void cgroup_exit(struct cgroup_ops *ops) free_equal(ops->container_cgroup, ops->container_limit_cgroup); - if (ops->cgroup2_devices) - bpf_program_free(ops->cgroup2_devices); + bpf_device_program_free(ops); if (ops->dfd_mnt_cgroupfs_host >= 0) close(ops->dfd_mnt_cgroupfs_host); diff --git a/src/lxc/cgroups/cgroup2_devices.c b/src/lxc/cgroups/cgroup2_devices.c index 99d67f692..ae281eeaf 100644 --- a/src/lxc/cgroups/cgroup2_devices.c +++ b/src/lxc/cgroups/cgroup2_devices.c @@ -60,17 +60,6 @@ static int bpf_program_add_instructions(struct bpf_program *prog, 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) */ #define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \ ((struct bpf_insn){.code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \ @@ -442,7 +431,7 @@ void bpf_device_program_free(struct cgroup_ops *ops) { if (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; } } diff --git a/src/lxc/cgroups/cgroup2_devices.h b/src/lxc/cgroups/cgroup2_devices.h index 89dc0260c..f4983f065 100644 --- a/src/lxc/cgroups/cgroup2_devices.h +++ b/src/lxc/cgroups/cgroup2_devices.h @@ -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_finalize(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 bool bpf_devices_cgroup_supported(void); @@ -100,6 +99,14 @@ __hidden extern bool bpf_cgroup_devices_update(struct cgroup_ops *ops, struct device_item *new, 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 __do_bpf_program_free call_cleaner(bpf_program_free) -- 2.39.5