From: Jens Axboe Date: Fri, 16 Jan 2026 21:37:28 +0000 (-0700) Subject: io_uring/bpf_filter: add ref counts to struct io_bpf_filter X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7f67c2be7877a3d44aa79b8d22eae8cb6e2c6d6;p=thirdparty%2Flinux.git io_uring/bpf_filter: add ref counts to struct io_bpf_filter 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 Signed-off-by: Jens Axboe --- diff --git a/io_uring/bpf_filter.c b/io_uring/bpf_filter.c index 1409d625b6865..b94944ab84429 100644 --- a/io_uring/bpf_filter.c +++ b/io_uring/bpf_filter.c @@ -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;