]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
bpf: Fix UAF in sock clone early bailouts
authorMatt Bobrowski <mattbobrowski@google.com>
Thu, 9 Jul 2026 02:53:16 +0000 (02:53 +0000)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 9 Jul 2026 16:44:16 +0000 (18:44 +0200)
commit7cbd0c4cebe4c9f678d15e6b9ba975e1155a107f
tree1202aec41ddd9c9f7809611d39435d9177c2a785
parent2c7c88a412aa6d09cd04b414211b4ef8553b5309
bpf: Fix UAF in sock clone early bailouts

Similar to recent commit 9b51a6155d14 ("bpf,fork: wipe ->bpf_storage
before bailouts that access it"), sk_clone() performs an initial
shallow copy of the socket field ->sk_bpf_storage via sock_copy()
for the cloned socket newsk.

If sk_clone() bails out early (e.g. if sk_filter_charge() fails) prior
to calling bpf_sk_storage_clone(), newsk->sk_bpf_storage still points
to the parent socket's BPF local storage. When newsk is subsequently
freed via sk_free(), the deallocation path (__sk_destruct() ->
bpf_sk_storage_free()) destroys the parent socket's BPF local storage,
leading to a use-after-free (UAF) on the parent socket.

Fix this by resetting newsk->sk_bpf_storage to NULL immediately after
sock_copy() in sk_clone(), and remove the now redundant initialization
from bpf_sk_storage_clone().

Fixes: 6ac99e8f23d4 ("bpf: Introduce bpf sk local storage")
Fixes: f12dd75959b0 ("bpf: net: Set sk_bpf_storage back to NULL for cloned sk")
Signed-off-by: Matt Bobrowski <mattbobrowski@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20260709025316.999913-1-mattbobrowski@google.com
net/core/bpf_sk_storage.c
net/core/sock.c