summaryrefslogtreecommitdiff
path: root/internal/c
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-22 22:31:35 +0200
committerPaul Buetow <paul@buetow.org>2026-02-22 22:31:35 +0200
commit4cd2c4e818a1438bf63d1ca05a6cf134f39bc06b (patch)
tree40b4ad1ab60a6f50973a66c4e273c91e0d8d265b /internal/c
parent8e52ba5a8661c717f45e00608ad64f0adc6de3e1 (diff)
Add copy_file_range support and tracepoint attach tests
Diffstat (limited to 'internal/c')
-rw-r--r--internal/c/generated_tracepoints.c48
-rw-r--r--internal/c/generated_tracepoints_result.txt3
2 files changed, 49 insertions, 2 deletions
diff --git a/internal/c/generated_tracepoints.c b/internal/c/generated_tracepoints.c
index 72cb070..9f62fd8 100644
--- a/internal/c/generated_tracepoints.c
+++ b/internal/c/generated_tracepoints.c
@@ -20,7 +20,6 @@
/// Ignoring sys_enter_clone sys_exit_clone as possibly not file I/O related
/// Ignoring sys_enter_clone3 sys_exit_clone3 as possibly not file I/O related
/// Ignoring sys_enter_connect sys_exit_connect as possibly not file I/O related
-/// Ignoring sys_enter_copy_file_range sys_exit_copy_file_range as possibly not file I/O related
/// Ignoring sys_enter_delete_module sys_exit_delete_module as possibly not file I/O related
/// Ignoring sys_enter_epoll_create sys_exit_epoll_create as possibly not file I/O related
/// Ignoring sys_enter_epoll_create1 sys_exit_epoll_create1 as possibly not file I/O related
@@ -423,6 +422,8 @@
#define SYS_EXIT_PWRITEV 827
#define SYS_ENTER_PWRITEV2 826
#define SYS_EXIT_PWRITEV2 825
+#define SYS_ENTER_COPY_FILE_RANGE 822
+#define SYS_EXIT_COPY_FILE_RANGE 821
#define SYS_ENTER_TRUNCATE 820
#define SYS_EXIT_TRUNCATE 819
#define SYS_ENTER_FTRUNCATE 818
@@ -4354,6 +4355,51 @@ int handle_sys_exit_pwritev2(struct trace_event_raw_sys_exit *ctx) {
return 0;
}
+/// sys_enter_copy_file_range is a struct fd_event
+SEC("tracepoint/syscalls/sys_enter_copy_file_range")
+int handle_sys_enter_copy_file_range(struct trace_event_raw_sys_enter *ctx) {
+ __u32 pid, tid;
+ if (filter(&pid, &tid))
+ return 0;
+
+ struct fd_event *ev = bpf_ringbuf_reserve(&event_map, sizeof(struct fd_event), 0);
+ if (!ev)
+ return 0;
+
+ ev->event_type = ENTER_FD_EVENT;
+ ev->trace_id = SYS_ENTER_COPY_FILE_RANGE;
+ ev->pid = pid;
+ ev->tid = tid;
+ ev->time = bpf_ktime_get_boot_ns();
+ ev->fd = (__s32)ctx->args[0];
+
+ bpf_ringbuf_submit(ev, 0);
+ return 0;
+}
+
+/// sys_exit_copy_file_range is a struct ret_event (TRANSFER_CLASSIFIED)
+SEC("tracepoint/syscalls/sys_exit_copy_file_range")
+int handle_sys_exit_copy_file_range(struct trace_event_raw_sys_exit *ctx) {
+ __u32 pid, tid;
+ if (filter(&pid, &tid))
+ return 0;
+
+ struct ret_event *ev = bpf_ringbuf_reserve(&event_map, sizeof(struct ret_event), 0);
+ if (!ev)
+ return 0;
+
+ ev->event_type = EXIT_RET_EVENT;
+ ev->trace_id = SYS_EXIT_COPY_FILE_RANGE;
+ ev->pid = pid;
+ ev->tid = tid;
+ ev->time = bpf_ktime_get_boot_ns();
+ ev->ret = ctx->ret;
+ ev->ret_type = TRANSFER_CLASSIFIED;
+
+ bpf_ringbuf_submit(ev, 0);
+ return 0;
+}
+
/// sys_enter_truncate is a struct path_event
SEC("tracepoint/syscalls/sys_enter_truncate")
int handle_sys_enter_truncate(struct trace_event_raw_sys_enter *ctx) {
diff --git a/internal/c/generated_tracepoints_result.txt b/internal/c/generated_tracepoints_result.txt
index 357d279..e3fdd55 100644
--- a/internal/c/generated_tracepoints_result.txt
+++ b/internal/c/generated_tracepoints_result.txt
@@ -18,7 +18,6 @@ Ignoring sys_enter_clock_settime sys_exit_clock_settime as possibly not file I/O
Ignoring sys_enter_clone sys_exit_clone as possibly not file I/O related
Ignoring sys_enter_clone3 sys_exit_clone3 as possibly not file I/O related
Ignoring sys_enter_connect sys_exit_connect as possibly not file I/O related
-Ignoring sys_enter_copy_file_range sys_exit_copy_file_range as possibly not file I/O related
Ignoring sys_enter_delete_module sys_exit_delete_module as possibly not file I/O related
Ignoring sys_enter_epoll_create sys_exit_epoll_create as possibly not file I/O related
Ignoring sys_enter_epoll_create1 sys_exit_epoll_create1 as possibly not file I/O related
@@ -258,6 +257,7 @@ sys_enter_chown is a struct path_event
sys_enter_chroot is a struct path_event
sys_enter_close is a struct fd_event
sys_enter_close_range is a struct fd_event
+sys_enter_copy_file_range is a struct fd_event
sys_enter_creat is a struct path_event
sys_enter_dup is a struct fd_event
sys_enter_dup2 is a struct fd_event
@@ -372,6 +372,7 @@ sys_exit_chown is a struct ret_event (UNCLASSIFIED)
sys_exit_chroot is a struct ret_event (UNCLASSIFIED)
sys_exit_close is a struct ret_event (UNCLASSIFIED)
sys_exit_close_range is a struct ret_event (UNCLASSIFIED)
+sys_exit_copy_file_range is a struct ret_event (TRANSFER_CLASSIFIED)
sys_exit_creat is a struct ret_event (UNCLASSIFIED)
sys_exit_dup is a struct ret_event (UNCLASSIFIED)
sys_exit_dup2 is a struct ret_event (UNCLASSIFIED)