summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/lsm_cgroup.c
diff options
context:
space:
mode:
authorAlexei Starovoitov <ast@kernel.org>2024-04-26 17:25:44 -0700
committerMartin KaFai Lau <martin.lau@kernel.org>2024-04-29 14:16:41 -0700
commit0db63c0b86e981a1e97d2596d64ceceba1a5470e (patch)
treed7e6ddaca356bbd5069fe7a5a8aab2cfa0fe97d7 /tools/testing/selftests/bpf/progs/lsm_cgroup.c
parent89de2db19317fb89a6e9163f33c3a7b23ee75a18 (diff)
bpf: Fix verifier assumptions about socket->sk
The verifier assumes that 'sk' field in 'struct socket' is valid and non-NULL when 'socket' pointer itself is trusted and non-NULL. That may not be the case when socket was just created and passed to LSM socket_accept hook. Fix this verifier assumption and adjust tests. Reported-by: Liam Wisehart <liamwisehart@meta.com> Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Fixes: 6fcd486b3a0a ("bpf: Refactor RCU enforcement in the verifier.") Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/r/20240427002544.68803-1-alexei.starovoitov@gmail.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Diffstat (limited to 'tools/testing/selftests/bpf/progs/lsm_cgroup.c')
-rw-r--r--tools/testing/selftests/bpf/progs/lsm_cgroup.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/tools/testing/selftests/bpf/progs/lsm_cgroup.c b/tools/testing/selftests/bpf/progs/lsm_cgroup.c
index 02c11d16b692..d7598538aa2d 100644
--- a/tools/testing/selftests/bpf/progs/lsm_cgroup.c
+++ b/tools/testing/selftests/bpf/progs/lsm_cgroup.c
@@ -103,11 +103,15 @@ static __always_inline int real_bind(struct socket *sock,
int addrlen)
{
struct sockaddr_ll sa = {};
+ struct sock *sk = sock->sk;
- if (sock->sk->__sk_common.skc_family != AF_PACKET)
+ if (!sk)
+ return 1;
+
+ if (sk->__sk_common.skc_family != AF_PACKET)
return 1;
- if (sock->sk->sk_kern_sock)
+ if (sk->sk_kern_sock)
return 1;
bpf_probe_read_kernel(&sa, sizeof(sa), address);