summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorAmery Hung <ameryhung@gmail.com>2026-02-05 14:29:01 -0800
committerMartin KaFai Lau <martin.lau@kernel.org>2026-02-06 14:28:55 -0800
commitfd103ffc57c9a3b8b76bc852ffae5eb630a6ded4 (patch)
tree859736ed9030d321d5513b1b1ceb5f1069629d3f /net
parent1b7e0cae85accc9e728004511193e995cd040300 (diff)
downloadlwn-fd103ffc57c9a3b8b76bc852ffae5eb630a6ded4.tar.gz
lwn-fd103ffc57c9a3b8b76bc852ffae5eb630a6ded4.zip
bpf: Convert bpf_selem_link_map to failable
To prepare for changing bpf_local_storage_map_bucket::lock to rqspinlock, convert bpf_selem_link_map() to failable. It still always succeeds and returns 0 until the change happens. No functional change. Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Amery Hung <ameryhung@gmail.com> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Link: https://patch.msgid.link/20260205222916.1788211-4-ameryhung@gmail.com
Diffstat (limited to 'net')
-rw-r--r--net/core/bpf_sk_storage.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c
index e36273e4fcbd..0b85d8f2c17e 100644
--- a/net/core/bpf_sk_storage.c
+++ b/net/core/bpf_sk_storage.c
@@ -191,7 +191,14 @@ int bpf_sk_storage_clone(const struct sock *sk, struct sock *newsk)
}
if (new_sk_storage) {
- bpf_selem_link_map(smap, new_sk_storage, copy_selem);
+ ret = bpf_selem_link_map(smap, new_sk_storage, copy_selem);
+ if (ret) {
+ bpf_selem_free(copy_selem, true);
+ atomic_sub(smap->elem_size,
+ &newsk->sk_omem_alloc);
+ bpf_map_put(map);
+ goto out;
+ }
bpf_selem_link_storage_nolock(new_sk_storage, copy_selem);
} else {
ret = bpf_local_storage_alloc(newsk, smap, copy_selem, GFP_ATOMIC);