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