xref: /linux/tools/testing/selftests/bpf/progs/ksock_lsm_verifier.c (revision 5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500)
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2026 Isovalent */
3 
4 #include "vmlinux.h"
5 #include <bpf/bpf_helpers.h>
6 #include <bpf/bpf_tracing.h>
7 #include "bpf_misc.h"
8 #include "ksock_common.h"
9 
10 char send_data[11] = "dummy data";
11 
12 SEC("lsm.s/socket_sendmsg")
13 __description("bpf_ksock_send is rejected from socket_sendmsg LSM hook")
14 __failure __msg("calling kernel function bpf_ksock_send is not allowed")
BPF_PROG(ksock_socket_sendmsg,struct socket * sock,struct msghdr * msg,int size,int ret)15 int BPF_PROG(ksock_socket_sendmsg, struct socket *sock, struct msghdr *msg,
16 	     int size, int ret)
17 {
18 	struct __ksock_ctx_value *v;
19 	struct bpf_ksock *ks;
20 
21 	v = ksock_ctx_value_lookup();
22 	if (!v)
23 		return ret;
24 
25 	ks = bpf_kptr_xchg(&v->ctx, NULL);
26 	if (!ks)
27 		return ret;
28 
29 	bpf_ksock_send(ks, send_data, sizeof(send_data));
30 	bpf_ksock_release(ks);
31 
32 	return ret;
33 }
34 
35 char __license[] SEC("license") = "GPL";
36