summaryrefslogtreecommitdiff
path: root/internal/eventloop.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-23 10:45:21 +0200
committerPaul Buetow <paul@buetow.org>2026-02-23 10:45:21 +0200
commit59df9d8c4562ee46a37256e1330bd5e65781eba7 (patch)
tree73bf9f16226b6868a5bd2a05ef2d62383075a22c /internal/eventloop.go
parentfaeb28d0e0e8ad6b1ec1bbd7aa4d0db1f07013e5 (diff)
Track pidfd_getfd returned fds in eventloop
Diffstat (limited to 'internal/eventloop.go')
-rw-r--r--internal/eventloop.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index f4f7a7c..345150c 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -323,6 +323,17 @@ func (e *eventLoop) tracepointExited(exitEv event.Event, ch chan<- *event.Pair)
e.files[newFd] = fdFile.Dup(newFd)
}
}
+ if ep.Is(SYS_ENTER_PIDFD_GETFD) {
+ retEv, ok := ep.ExitEv.(*RetEvent)
+ if !ok {
+ panic("expected *types.RetEvent")
+ }
+ if newFd := int32(retEv.Ret); newFd >= 0 {
+ transferredFile := file.NewFdWithPid(newFd, v.Pid)
+ e.files[newFd] = transferredFile
+ ep.File = transferredFile
+ }
+ }
if retEv, ok := ep.ExitEv.(*RetEvent); ok {
ep.Bytes = bytesFromRet(retEv)