Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
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";