xref: /linux/tools/testing/selftests/bpf/progs/getpeername_unix_prog.c (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
182ab6b50SDaan De Meyer // SPDX-License-Identifier: GPL-2.0
282ab6b50SDaan De Meyer /* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
382ab6b50SDaan De Meyer 
482ab6b50SDaan De Meyer #include "vmlinux.h"
582ab6b50SDaan De Meyer 
682ab6b50SDaan De Meyer #include <string.h>
782ab6b50SDaan De Meyer #include <bpf/bpf_helpers.h>
882ab6b50SDaan De Meyer #include <bpf/bpf_core_read.h>
982ab6b50SDaan De Meyer #include "bpf_kfuncs.h"
1082ab6b50SDaan De Meyer 
1182ab6b50SDaan De Meyer __u8 SERVUN_REWRITE_ADDRESS[] = "\0bpf_cgroup_unix_test_rewrite";
1282ab6b50SDaan De Meyer 
1382ab6b50SDaan De Meyer SEC("cgroup/getpeername_unix")
getpeername_unix_prog(struct bpf_sock_addr * ctx)1482ab6b50SDaan De Meyer int getpeername_unix_prog(struct bpf_sock_addr *ctx)
1582ab6b50SDaan De Meyer {
1682ab6b50SDaan De Meyer 	struct bpf_sock_addr_kern *sa_kern = bpf_cast_to_kern_ctx(ctx);
1782ab6b50SDaan De Meyer 	struct sockaddr_un *sa_kern_unaddr;
1882ab6b50SDaan De Meyer 	__u32 unaddrlen = offsetof(struct sockaddr_un, sun_path) +
1982ab6b50SDaan De Meyer 			  sizeof(SERVUN_REWRITE_ADDRESS) - 1;
2082ab6b50SDaan De Meyer 	int ret;
2182ab6b50SDaan De Meyer 
2282ab6b50SDaan De Meyer 	ret = bpf_sock_addr_set_sun_path(sa_kern, SERVUN_REWRITE_ADDRESS,
2382ab6b50SDaan De Meyer 					 sizeof(SERVUN_REWRITE_ADDRESS) - 1);
2482ab6b50SDaan De Meyer 	if (ret)
2582ab6b50SDaan De Meyer 		return 1;
2682ab6b50SDaan De Meyer 
2782ab6b50SDaan De Meyer 	if (sa_kern->uaddrlen != unaddrlen)
2882ab6b50SDaan De Meyer 		return 1;
2982ab6b50SDaan De Meyer 
30*ea9d5616SAndrii Nakryiko 	sa_kern_unaddr = bpf_core_cast(sa_kern->uaddr, struct sockaddr_un);
3182ab6b50SDaan De Meyer 	if (memcmp(sa_kern_unaddr->sun_path, SERVUN_REWRITE_ADDRESS,
3282ab6b50SDaan De Meyer 			sizeof(SERVUN_REWRITE_ADDRESS) - 1) != 0)
3382ab6b50SDaan De Meyer 		return 1;
3482ab6b50SDaan De Meyer 
3582ab6b50SDaan De Meyer 	return 1;
3682ab6b50SDaan De Meyer }
3782ab6b50SDaan De Meyer 
3882ab6b50SDaan De Meyer char _license[] SEC("license") = "GPL";
39