diff options
| author | Josef Bacik <josef@toxicpanda.com> | 2026-10-17 16:37:25 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2026-10-17 22:01:14 +0000 |
| commit | 927c9c985f3ef4d30c086884b7e0ecb933f742ef (patch) | |
| tree | 7afec02aae73c3e4329f30986d1fefe9b94ae822 /include/linux | |
| parent | 1e28a5e52d32b7d3f4c9fb24898774f941166d2b (diff) | |
| download | linux-927c9c985f3ef4d30c086884b7e0ecb933f742ef.tar.gz linux-927c9c985f3ef4d30c086884b7e0ecb933f742ef.zip | |
bpf: Count sleepable callbacks as sleepable map users
map->sleepable_refcnt tells bpf_map_fd_put_ptr() whether an inner map that
is taken out of its outer map has to wait for an RCU Tasks Trace grace
period as well. It counts the sleepable programs that use the outer map.
The bpf_wq or bpf_task_work callback of a program that is not sleepable
runs under rcu_read_lock_trace() only, and is not counted.
Such a callback can look an inner map up and keep it while user space
deletes it from the outer map. The inner map is freed behind a plain RCU
grace period, under the callback:
BUG: KASAN: slab-use-after-free in array_map_update_elem+0x6bc/0x7d0
Count a program with such a callback. The maps are bound before the
verifier meets the callback, so raise the count of those that are bound
when it does.
Fixes: 8e83da9732d9 ("bpf: add bpf_wq_start")
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://patch.msgid.link/20261017163745.3341787-24-alexei.starovoitov@gmail.com
Diffstat (limited to 'include/linux')
0 files changed, 0 insertions, 0 deletions
