]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring/bpf_filter: add ref counts to struct io_bpf_filter
authorJens Axboe <axboe@kernel.dk>
Fri, 16 Jan 2026 21:37:28 +0000 (14:37 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 27 Jan 2026 18:10:46 +0000 (11:10 -0700)
In preparation for allowing inheritance of BPF filters and filter
tables, add a reference count to the filter. This allows multiple tables
to safely include the same filter.

Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/bpf_filter.c

index 1409d625b686594535da3873335e06adc1385dd9..b94944ab84429a34ff9ff5b911be2079a7dbdfcb 100644 (file)
@@ -15,6 +15,7 @@
 #include "openclose.h"
 
 struct io_bpf_filter {
+       refcount_t              refs;
        struct bpf_prog         *prog;
        struct io_bpf_filter    *next;
 };
@@ -125,6 +126,11 @@ static void io_free_bpf_filters(struct rcu_head *head)
                         */
                        if (f == &dummy_filter)
                                break;
+
+                       /* Someone still holds a ref, stop iterating. */
+                       if (!refcount_dec_and_test(&f->refs))
+                               break;
+
                        bpf_prog_destroy(f->prog);
                        kfree(f);
                        f = next;
@@ -298,6 +304,7 @@ int io_register_bpf_filter(struct io_restriction *res,
                ret = -ENOMEM;
                goto err;
        }
+       refcount_set(&filter->refs, 1);
        filter->prog = prog;
        res->bpf_filters = filters;