0001
0002 #include "vmlinux.h"
0003 #include <bpf/bpf_helpers.h>
0004 #include <bpf/bpf_tracing.h>
0005 #include <bpf/bpf_core_read.h>
0006 #include "bpf_misc.h"
0007
0008 static struct sockaddr_in old;
0009
0010 static int handle_sys_connect_common(struct sockaddr_in *uservaddr)
0011 {
0012 struct sockaddr_in new;
0013
0014 bpf_probe_read_user(&old, sizeof(old), uservaddr);
0015 __builtin_memset(&new, 0xab, sizeof(new));
0016 bpf_probe_write_user(uservaddr, &new, sizeof(new));
0017
0018 return 0;
0019 }
0020
0021 SEC("ksyscall/connect")
0022 int BPF_KSYSCALL(handle_sys_connect, int fd, struct sockaddr_in *uservaddr,
0023 int addrlen)
0024 {
0025 return handle_sys_connect_common(uservaddr);
0026 }
0027
0028 #if defined(bpf_target_s390)
0029 #ifndef SYS_CONNECT
0030 #define SYS_CONNECT 3
0031 #endif
0032
0033 SEC("ksyscall/socketcall")
0034 int BPF_KSYSCALL(handle_sys_socketcall, int call, unsigned long *args)
0035 {
0036 if (call == SYS_CONNECT) {
0037 struct sockaddr_in *uservaddr;
0038
0039 bpf_probe_read_user(&uservaddr, sizeof(uservaddr), &args[1]);
0040 return handle_sys_connect_common(uservaddr);
0041 }
0042
0043 return 0;
0044 }
0045 #endif
0046
0047 char _license[] SEC("license") = "GPL";