summaryrefslogtreecommitdiff
path: root/internal/eventloop.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-03-01 01:05:40 +0200
committerPaul Buetow <paul@buetow.org>2024-03-01 01:05:40 +0200
commitdfaa92b076acfc341649888bef10116dc5f3e94e (patch)
treef6dccfab72dca4dc0965b50ce0e6a916b3d6b866 /internal/eventloop.go
parent5512e4441ba93d1a8d55faf56d66eaf9986551f1 (diff)
print out file (fd and name) for each syscall
Diffstat (limited to 'internal/eventloop.go')
-rw-r--r--internal/eventloop.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index 6163ebf..37771ee 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -21,6 +21,7 @@ func eventLoop(bpfModule *bpf.Module, rawCh <-chan []byte) {
func events(rawCh <-chan []byte) <-chan enterExitEvent {
evCh := make(chan enterExitEvent)
enterEvs := make(map[uint32]enterExitEvent)
+ files := make(map[int32]file)
enter := func(enterEv event) {
enterEvs[enterEv.GetTid()] = enterExitEvent{
@@ -36,6 +37,31 @@ func events(rawCh <-chan []byte) <-chan enterExitEvent {
}
delete(enterEvs, exitEv.GetTid())
ev.exitEv = exitEv
+
+ if ev.is(SYS_ENTER_OPENAT, SYS_EXIT_OPENAT) || ev.is(SYS_ENTER_OPEN, SYS_EXIT_OPEN) {
+ openEnterEv := ev.enterEv.(*OpenEnterEvent)
+ fd := ev.exitEv.(*FdEvent).Fd
+ file := file{fd, string(openEnterEv.Filename[:])}
+
+ if fd >= 0 {
+ files[fd] = file
+ }
+ ev.comm = string(openEnterEv.Comm[:])
+ ev.file = file
+ return
+ }
+
+ if fdEvent, ok := ev.enterEv.(*FdEvent); ok {
+ if file_, ok := files[fdEvent.Fd]; ok {
+ ev.file = file_
+ } else {
+ ev.file = file{fdEvent.Fd, "?"}
+ }
+ if ev.is(SYS_ENTER_CLOSE, SYS_EXIT_CLOSE) {
+ delete(files, fdEvent.Fd)
+ }
+ }
+
evCh <- ev
}