summaryrefslogtreecommitdiff
path: root/internal/generate/bpfhandler.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-20 23:42:12 +0300
committerPaul Buetow <paul@buetow.org>2026-05-20 23:42:12 +0300
commitbe6d4e8ffc722bf0d36c5b01ff46f817539a1525 (patch)
tree7bb0aeb51e29cfbc6735af15bb812b888f4b3574 /internal/generate/bpfhandler.go
parent2156d6e51b18e29fe8dfe8e1a519e1a84e0a1fe6 (diff)
task-47: add KindExec for execve paths
Diffstat (limited to 'internal/generate/bpfhandler.go')
-rw-r--r--internal/generate/bpfhandler.go26
1 files changed, 26 insertions, 0 deletions
diff --git a/internal/generate/bpfhandler.go b/internal/generate/bpfhandler.go
index b166725..5489d88 100644
--- a/internal/generate/bpfhandler.go
+++ b/internal/generate/bpfhandler.go
@@ -111,6 +111,8 @@ func generateExtra(tp GeneratedTracepoint, isEnter bool) string {
return generateExtraOpen(f)
case KindMqOpen:
return generateExtraMqOpen(f)
+ case KindExec:
+ return generateExtraExec(f)
case KindPathname:
return generateExtraPathname(tp, f)
case KindName:
@@ -146,6 +148,30 @@ func generateExtraMqOpen(f *Format) string {
return generateExtraOpenWithFields(f, "u_name", "oflag")
}
+func generateExtraExec(f *Format) string {
+ filenameIdx := f.FieldNumber("filename")
+ dirfdIdx := f.FieldNumber("dfd")
+ flagsIdx := f.FieldNumber("flags")
+ if filenameIdx < 0 {
+ filenameIdx = 0
+ }
+ var b strings.Builder
+ b.WriteString(" __builtin_memset(&(ev->filename), 0, sizeof(ev->filename) + sizeof(ev->comm));\n")
+ fmt.Fprintf(&b, " bpf_probe_read_user_str(ev->filename, sizeof(ev->filename), (void *)ctx->args[%d]);\n", filenameIdx)
+ b.WriteString(" bpf_get_current_comm(&ev->comm, sizeof(ev->comm));\n")
+ if dirfdIdx > -1 {
+ fmt.Fprintf(&b, " ev->dirfd = (__s32)ctx->args[%d];\n", dirfdIdx)
+ } else {
+ b.WriteString(" ev->dirfd = -1;\n")
+ }
+ if flagsIdx > -1 {
+ fmt.Fprintf(&b, " ev->flags = (__s32)ctx->args[%d];\n", flagsIdx)
+ } else {
+ b.WriteString(" ev->flags = 0;\n")
+ }
+ return b.String()
+}
+
func generateExtraOpenWithFields(f *Format, pathnameField, flagsField string) string {
filenameIdx := f.FieldNumber(pathnameField)
flagsIdx := f.FieldNumber(flagsField)