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