]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bpf-link: introduce bpf_ring_buffer_free() and friends
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Sep 2024 00:43:18 +0000 (09:43 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Sep 2024 05:36:54 +0000 (14:36 +0900)
Then, replace rb_free() in networkd.

Follow-up for 6d9ef22acdeac4b429efb75164341233955484af.

src/network/networkd-sysctl.c
src/nsresourced/nsresourced-manager.c
src/shared/bpf-link.c
src/shared/bpf-link.h

index 667c4408dd9fb1c263a72ebf98e051d4e26b9cd5..2b9e860c81812b4a7081ea48ce7a7cac255270d0 100644 (file)
@@ -34,13 +34,7 @@ static struct sysctl_monitor_bpf* sysctl_monitor_bpf_free(struct sysctl_monitor_
         return NULL;
 }
 
-static struct ring_buffer* rb_free(struct ring_buffer *rb) {
-        sym_ring_buffer__free(rb);
-        return NULL;
-}
-
 DEFINE_TRIVIAL_CLEANUP_FUNC(struct sysctl_monitor_bpf *, sysctl_monitor_bpf_free);
-DEFINE_TRIVIAL_CLEANUP_FUNC(struct ring_buffer *, rb_free);
 
 static int sysctl_event_handler(void *ctx, void *data, size_t data_sz) {
         struct sysctl_write_event *we = ASSERT_PTR(data);
@@ -99,7 +93,7 @@ static int on_ringbuf_io(sd_event_source *s, int fd, uint32_t revents, void *use
 int sysctl_add_monitor(Manager *manager) {
         _cleanup_(sysctl_monitor_bpf_freep) struct sysctl_monitor_bpf *obj = NULL;
         _cleanup_(bpf_link_freep) struct bpf_link *sysctl_link = NULL;
-        _cleanup_(rb_freep) struct ring_buffer *sysctl_buffer = NULL;
+        _cleanup_(bpf_ring_buffer_freep) struct ring_buffer *sysctl_buffer = NULL;
         _cleanup_close_ int cgroup_fd = -EBADF, rootcg = -EBADF;
         _cleanup_free_ char *cgroup = NULL;
         int idx = 0, r;
@@ -163,7 +157,7 @@ void sysctl_remove_monitor(Manager *manager) {
         assert(manager);
 
         manager->sysctl_event_source = sd_event_source_disable_unref(manager->sysctl_event_source);
-        manager->sysctl_buffer = rb_free(manager->sysctl_buffer);
+        manager->sysctl_buffer = bpf_ring_buffer_free(manager->sysctl_buffer);
         manager->sysctl_link = bpf_link_free(manager->sysctl_link);
         manager->sysctl_skel = sysctl_monitor_bpf_free(manager->sysctl_skel);
         manager->cgroup_fd = safe_close(manager->cgroup_fd);
index d87da586f7e4bade9f1039edf203d2cebf446f4c..43a00d6cefdfc58688ca9c84f9f254f51d7e1c1c 100644 (file)
@@ -6,6 +6,7 @@
 #include "sd-daemon.h"
 
 #include "bpf-dlopen.h"
+#include "bpf-link.h"
 #include "build-path.h"
 #include "common-signal.h"
 #include "env-util.h"
@@ -141,8 +142,7 @@ Manager* manager_free(Manager *m) {
 
 #if HAVE_VMLINUX_H
         sd_event_source_disable_unref(m->userns_restrict_bpf_ring_buffer_event_source);
-        if (m->userns_restrict_bpf_ring_buffer)
-                sym_ring_buffer__free(m->userns_restrict_bpf_ring_buffer);
+        bpf_ring_buffer_free(m->userns_restrict_bpf_ring_buffer);
         userns_restrict_bpf_free(m->userns_restrict_bpf);
 #endif
 
index 77f6a4ee9ac8bb484928655b3da686b73141c5e0..c83ebd48040ce9ced8c1d669225f4c3f14d3e644 100644 (file)
@@ -31,7 +31,7 @@ int bpf_serialize_link(FILE *f, FDSet *fds, const char *key, struct bpf_link *li
         return serialize_fd(f, fds, key, sym_bpf_link__fd(link));
 }
 
-struct bpf_link *bpf_link_free(struct bpf_link *link) {
+struct bpf_linkbpf_link_free(struct bpf_link *link) {
         /* If libbpf wasn't dlopen()ed, sym_bpf_link__destroy might be unresolved (NULL), so let's not try to
          * call it if link is NULL. link might also be a non-null "error pointer", but such a value can only
          * originate from a call to libbpf, but that means that libbpf is available, and we can let
@@ -41,3 +41,10 @@ struct bpf_link *bpf_link_free(struct bpf_link *link) {
 
         return NULL;
 }
+
+struct ring_buffer* bpf_ring_buffer_free(struct ring_buffer *rb) {
+        if (rb) /* See the comment in bpf_link_free(). */
+                sym_ring_buffer__free(rb);
+
+        return NULL;
+}
index 38aa080862dd1521801fef72759cd3dfd5d492f1..c66bf38eaeb9a66c38e8552f049eddb3705d71a2 100644 (file)
@@ -12,5 +12,8 @@ bool bpf_can_link_program(struct bpf_program *prog);
 
 int bpf_serialize_link(FILE *f, FDSet *fds, const char *key, struct bpf_link *link);
 
-struct bpf_link *bpf_link_free(struct bpf_link *p);
+struct bpf_linkbpf_link_free(struct bpf_link *p);
 DEFINE_TRIVIAL_CLEANUP_FUNC(struct bpf_link *, bpf_link_free);
+
+struct ring_buffer* bpf_ring_buffer_free(struct ring_buffer *rb);
+DEFINE_TRIVIAL_CLEANUP_FUNC(struct ring_buffer *, bpf_ring_buffer_free);