1b6c4e715SHengqi Chen /* SPDX-License-Identifier: GPL-2.0 */ 2b6c4e715SHengqi Chen /* Copyright (c) 2021 Hengqi Chen */ 3b6c4e715SHengqi Chen 4b6c4e715SHengqi Chen #include "vmlinux.h" 5b6c4e715SHengqi Chen #include <bpf/bpf_helpers.h> 6b6c4e715SHengqi Chen #include <bpf/bpf_tracing.h> 7b6c4e715SHengqi Chen #include "bpf_tracing_net.h" 8b6c4e715SHengqi Chen 9b6c4e715SHengqi Chen const volatile pid_t my_pid = 0; 10b6c4e715SHengqi Chen char path[256] = {}; 11b6c4e715SHengqi Chen 12b6c4e715SHengqi Chen SEC("fentry/unix_listen") BPF_PROG(unix_listen,struct socket * sock,int backlog)13b6c4e715SHengqi Chenint BPF_PROG(unix_listen, struct socket *sock, int backlog) 14b6c4e715SHengqi Chen { 15b6c4e715SHengqi Chen pid_t pid = bpf_get_current_pid_tgid() >> 32; 16b6c4e715SHengqi Chen struct unix_sock *unix_sk; 17b6c4e715SHengqi Chen int i, len; 18b6c4e715SHengqi Chen 19b6c4e715SHengqi Chen if (pid != my_pid) 20b6c4e715SHengqi Chen return 0; 21b6c4e715SHengqi Chen 22b6c4e715SHengqi Chen unix_sk = (struct unix_sock *)bpf_skc_to_unix_sock(sock->sk); 23b6c4e715SHengqi Chen if (!unix_sk) 24b6c4e715SHengqi Chen return 0; 25b6c4e715SHengqi Chen 26*5ce7ab49SKuniyuki Iwashima if (unix_sk->addr->name->sun_path[0]) 27b6c4e715SHengqi Chen return 0; 28b6c4e715SHengqi Chen 29b6c4e715SHengqi Chen len = unix_sk->addr->len - sizeof(short); 30b6c4e715SHengqi Chen path[0] = '@'; 31b6c4e715SHengqi Chen for (i = 1; i < len; i++) { 32b6c4e715SHengqi Chen if (i >= sizeof(struct sockaddr_un)) 33b6c4e715SHengqi Chen break; 34b6c4e715SHengqi Chen 35b6c4e715SHengqi Chen path[i] = unix_sk->addr->name->sun_path[i]; 36b6c4e715SHengqi Chen } 37b6c4e715SHengqi Chen return 0; 38b6c4e715SHengqi Chen } 39b6c4e715SHengqi Chen 40b6c4e715SHengqi Chen char _license[] SEC("license") = "GPL"; 41