1252190Srpaulo// SPDX-License-Identifier: GPL-2.0 2252190Srpaulo#include "vmlinux.h" 3252190Srpaulo#include <bpf/bpf_helpers.h> 4252190Srpaulo#include <bpf/bpf_tracing.h> 5252190Srpaulo#include <bpf/bpf_core_read.h> 6252190Srpaulo#include "bpf_misc.h" 7252190Srpaulo 8252190Srpaulostatic struct sockaddr_in old; 9252190Srpaulo 10252190Srpaulostatic int handle_sys_connect_common(struct sockaddr_in *uservaddr) 11252190Srpaulo{ 12252190Srpaulo struct sockaddr_in new; 13252190Srpaulo 14252190Srpaulo bpf_probe_read_user(&old, sizeof(old), uservaddr); 15252190Srpaulo __builtin_memset(&new, 0xab, sizeof(new)); 16252190Srpaulo bpf_probe_write_user(uservaddr, &new, sizeof(new)); 17252190Srpaulo 18252190Srpaulo return 0; 19252190Srpaulo} 20252190Srpaulo 21252190SrpauloSEC("ksyscall/connect") 22252190Srpauloint BPF_KSYSCALL(handle_sys_connect, int fd, struct sockaddr_in *uservaddr, 23252190Srpaulo int addrlen) 24252190Srpaulo{ 25252190Srpaulo return handle_sys_connect_common(uservaddr); 26252190Srpaulo} 27252190Srpaulo 28252190Srpaulo#if defined(bpf_target_s390) 29252190Srpaulo#ifndef SYS_CONNECT 30252190Srpaulo#define SYS_CONNECT 3 31252190Srpaulo#endif 32252190Srpaulo 33252190SrpauloSEC("ksyscall/socketcall") 34252190Srpauloint BPF_KSYSCALL(handle_sys_socketcall, int call, unsigned long *args) 35252190Srpaulo{ 36252190Srpaulo if (call == SYS_CONNECT) { 37252190Srpaulo struct sockaddr_in *uservaddr; 38252190Srpaulo 39252190Srpaulo bpf_probe_read_user(&uservaddr, sizeof(uservaddr), &args[1]); 40252190Srpaulo return handle_sys_connect_common(uservaddr); 41252190Srpaulo } 42252190Srpaulo 43252190Srpaulo return 0; 44252190Srpaulo} 45252190Srpaulo#endif 46252190Srpaulo 47252190Srpaulochar _license[] SEC("license") = "GPL"; 48252190Srpaulo