48 lines · c
1// SPDX-License-Identifier: GPL-2.02#include "vmlinux.h"3#include <bpf/bpf_helpers.h>4#include <bpf/bpf_tracing.h>5#include <bpf/bpf_core_read.h>6#include "bpf_misc.h"7 8static struct sockaddr_in old;9 10static int handle_sys_connect_common(struct sockaddr_in *uservaddr)11{12 struct sockaddr_in new;13 14 bpf_probe_read_user(&old, sizeof(old), uservaddr);15 __builtin_memset(&new, 0xab, sizeof(new));16 bpf_probe_write_user(uservaddr, &new, sizeof(new));17 18 return 0;19}20 21SEC("ksyscall/connect")22int BPF_KSYSCALL(handle_sys_connect, int fd, struct sockaddr_in *uservaddr,23 int addrlen)24{25 return handle_sys_connect_common(uservaddr);26}27 28#if defined(bpf_target_s390)29#ifndef SYS_CONNECT30#define SYS_CONNECT 331#endif32 33SEC("ksyscall/socketcall")34int BPF_KSYSCALL(handle_sys_socketcall, int call, unsigned long *args)35{36 if (call == SYS_CONNECT) {37 struct sockaddr_in *uservaddr;38 39 bpf_probe_read_user(&uservaddr, sizeof(uservaddr), &args[1]);40 return handle_sys_connect_common(uservaddr);41 }42 43 return 0;44}45#endif46 47char _license[] SEC("license") = "GPL";48