summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-03-06 23:06:24 +0200
committerPaul Buetow <paul@buetow.org>2025-03-06 23:06:24 +0200
commit2a52d1df8e8c83031b87dca801bb0415d423249a (patch)
tree3f441fc48f73dd7b9a492bdb8bc55a3c030dcfde /internal
parent0b06e51ea1d6eec4db969064708e1ba997e14f1d (diff)
find comm name dynamically
Diffstat (limited to 'internal')
-rw-r--r--internal/eventloop.go21
1 files changed, 17 insertions, 4 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index b26ae35..78f99e7 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -4,6 +4,7 @@ import "C"
import (
"fmt"
+ "os"
"ioriotng/internal/flags"
. "ioriotng/internal/generated/types"
@@ -107,6 +108,7 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) {
ev.file = file
comm := string(openEv.Comm[:])
+ // TODO: Filter out all other events not matching comm filter as well when comm filter enabled
e.comms[openEv.Tid] = comm
case *NameEvent:
@@ -115,12 +117,12 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) {
oldname: string(nameEvent.Oldname[:]),
newname: string(nameEvent.Newname[:]),
}
- ev.comm, _ = e.comms[ev.enterEv.GetTid()]
+ ev.comm = e.comm(ev.enterEv.GetTid())
case *PathEvent:
nameEvent := ev.enterEv.(*PathEvent)
ev.file = pathnameFile{string(nameEvent.Pathname[:])}
- ev.comm, _ = e.comms[ev.enterEv.GetTid()]
+ ev.comm = e.comm(ev.enterEv.GetTid())
case *FdEvent:
fd := ev.enterEv.(*FdEvent).Fd
@@ -132,10 +134,10 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) {
} else {
ev.file = newFdFileWithPid(fd, ev.enterEv.(*FdEvent).Pid)
}
- ev.comm, _ = e.comms[ev.enterEv.GetTid()]
+ ev.comm = e.comm(ev.enterEv.GetTid())
case *NullEvent:
- ev.comm, _ = e.comms[ev.enterEv.GetTid()]
+ ev.comm = e.comm(ev.enterEv.GetTid())
default:
panic(fmt.Sprintf("unknown type: %v", v))
@@ -146,3 +148,14 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) {
e.prevPairs[ev.enterEv.GetTid()] = ev
ch <- ev
}
+
+func (e *eventLoop) comm(pid uint32) string {
+ if comm, ok := e.comms[pid]; ok {
+ return comm
+ }
+ if linkName, err := os.Readlink(fmt.Sprintf("/proc/%d/exe", pid)); err == nil {
+ e.comms[pid] = linkName
+ return linkName
+ }
+ return ""
+}