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 Meyerint 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