int called_socket_post_create; int called_socket_post_create2; int called_socket_bind; int called_socket_bind2; int called_socket_alloc; int called_socket_clone;
static __always_inline int test_local_storage(void)
{
__u64 *val;
val = bpf_get_local_storage(&cgroup_storage, 0); if (!val) return0;
*val += 1;
return1;
}
static __always_inline int real_create(struct socket *sock, int family, int protocol)
{ struct sock *sk; int prio = 123;
/* The rest of the sockets get default policy. */ if (bpf_setsockopt(sk, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio))) return0; /* EPERM */
/* Make sure bpf_getsockopt is allowed and works. */
prio = 0; if (bpf_getsockopt(sk, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio))) return0; /* EPERM */ if (prio != 123) return0; /* EPERM */
/* Can access cgroup local storage. */ if (!test_local_storage()) return0; /* EPERM */
return1;
}
/* __cgroup_bpf_run_lsm_socket */
SEC("lsm_cgroup/socket_post_create") int BPF_PROG(socket_post_create, struct socket *sock, int family, int type, int protocol, int kern)
{
called_socket_post_create++; return real_create(sock, family, protocol);
}
/* __cgroup_bpf_run_lsm_socket */
SEC("lsm_cgroup/socket_post_create") int BPF_PROG(socket_post_create2, struct socket *sock, int family, int type, int protocol, int kern)
{
called_socket_post_create2++; return real_create(sock, family, protocol);
}
static __always_inline int real_bind(struct socket *sock, struct sockaddr *address, int addrlen)
{ struct sockaddr_ll sa = {}; struct sock *sk = sock->sk;
if (!sk) return1;
if (sk->__sk_common.skc_family != AF_PACKET) return1;
if (sk->sk_kern_sock) return1;
bpf_probe_read_kernel(&sa, sizeof(sa), address); if (sa.sll_protocol) return0; /* EPERM */
/* Can access cgroup local storage. */ if (!test_local_storage()) return0; /* EPERM */
/* __cgroup_bpf_run_lsm_current (via bpf_lsm_current_hooks) */
SEC("lsm_cgroup/sk_alloc_security") int BPF_PROG(socket_alloc, struct sock *sk, int family, gfp_t priority)
{
called_socket_alloc++; /* if already have non-bpf lsms installed, EPERM will cause memory leak of non-bpf lsms */ if (CONFIG_SECURITY_SELINUX || CONFIG_SECURITY_SMACK || CONFIG_SECURITY_APPARMOR) return1;
if (family == AF_UNIX) return0; /* EPERM */
/* Can access cgroup local storage. */ if (!test_local_storage()) return0; /* EPERM */
return1;
}
/* __cgroup_bpf_run_lsm_sock */
SEC("lsm_cgroup/inet_csk_clone") int BPF_PROG(socket_clone, struct sock *newsk, conststruct request_sock *req)
{ int prio = 234;
if (!newsk) return1;
/* Accepted request sockets get a different priority. */ if (bpf_setsockopt(newsk, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio))) return1;
/* Make sure bpf_getsockopt is allowed and works. */
prio = 0; if (bpf_getsockopt(newsk, SOL_SOCKET, SO_PRIORITY, &prio, sizeof(prio))) return1; if (prio != 234) return1;
/* Can access cgroup local storage. */ if (!test_local_storage()) return1;
called_socket_clone++;
return1;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.