Skip to content

Commit 8d27ea3

Browse files
authored
[CWS] commonize ptrace process fields (#44759)
### What does this PR do? ### Motivation ### Describe how you validated your changes ### Additional Notes Co-authored-by: sylvain.afchain <sylvain.afchain@datadoghq.com>
1 parent 17415d8 commit 8d27ea3

File tree

11 files changed

+43
-1667
lines changed

11 files changed

+43
-1667
lines changed

pkg/security/generators/accessors/accessors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -839,7 +839,7 @@ func newField(allFields map[string]*common.StructField, fieldName string, inputF
839839
if field, ok := allFields[fieldPath]; ok {
840840
if field.IsOrigTypePtr {
841841
// process & exec context are set in the template
842-
if !strings.HasPrefix(fieldName, "process.") && !strings.HasPrefix(fieldName, "exec.") && !strings.HasPrefix(fieldName, "exit.") {
842+
if !strings.HasPrefix(fieldName, "process.") && !strings.HasPrefix(fieldName, "exec.") && !strings.HasPrefix(fieldName, "exit.") && !strings.HasPrefix(fieldName, "ptrace.") {
843843
result += fmt.Sprintf("if ev.%s == nil { ev.%s = &%s{} }\n", field.Name, field.Name, field.OrigType)
844844
}
845845
} else if field.IsArray && fieldPath != inputField.Name {

pkg/security/generators/accessors/accessors.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,8 @@ func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error {
344344
mappedField = newField
345345
}
346346

347-
if strings.HasPrefix(mappedField, "process.") || strings.HasPrefix(mappedField, "exec.") || strings.HasPrefix(mappedField, "exit.") {
348-
ev.initProcess()
347+
if strings.HasPrefix(mappedField, "process.") || strings.HasPrefix(mappedField, "exec.") || strings.HasPrefix(mappedField, "exit.") || strings.HasPrefix(mappedField, "ptrace.") {
348+
ev.initPointerFields()
349349
}
350350

351351
switch mappedField {

pkg/security/secl/model/accessors_helpers.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) {
3030
return value, nil
3131
}
3232

33-
func (ev *Event) initProcess() {
33+
func (ev *Event) initPointerFields() {
3434
if ev.BaseEvent.ProcessContext == nil {
3535
ev.BaseEvent.ProcessContext = &ProcessContext{}
3636
}
@@ -42,6 +42,9 @@ func (ev *Event) initProcess() {
4242
}
4343

4444
ev.initProcessEventTypes()
45+
46+
// init platform specific pointer fields
47+
ev.initPlatformPointerFields()
4548
}
4649

4750
// nolint: unused

pkg/security/secl/model/accessors_unix.go

Lines changed: 2 additions & 1658 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/security/secl/model/accessors_windows.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/security/secl/model/model_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ func TestSetFieldValue(t *testing.T) {
126126
for _, field := range event.GetFields() {
127127
// use a fresh event to not get polluted by previous SetFieldValue
128128
event = NewFakeEvent()
129+
eventType, _, _, _, err := event.GetFieldMetadata(field)
130+
if err != nil {
131+
t.Fatal(err)
132+
}
133+
134+
if evt, _ := ParseEvalEventType(eventType); evt != UnknownEventType {
135+
event.Type = uint32(evt)
136+
}
129137

130138
_, kind, _, _, err := event.GetFieldMetadata(field)
131139
if err != nil {

pkg/security/secl/model/model_unix.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,3 +1100,17 @@ type TracerMemfdSealEvent struct {
11001100
SyscallEvent
11011101
Fd uint32
11021102
}
1103+
1104+
func (e *Event) initPlatformPointerFields() {
1105+
if e.GetEventType() == PTraceEventType {
1106+
if e.PTrace.Tracee == nil {
1107+
e.PTrace.Tracee = &ProcessContext{}
1108+
}
1109+
if e.PTrace.Tracee.Ancestor == nil {
1110+
e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{}
1111+
}
1112+
if e.PTrace.Tracee.Parent == nil {
1113+
e.PTrace.Tracee.Parent = &e.PTrace.Tracee.Ancestor.ProcessContext.Process
1114+
}
1115+
}
1116+
}

pkg/security/secl/model/model_windows.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,5 @@ func (pc *ProcessCacheEntry) Hash() eval.ScopeHashKey {
258258
func (pc *ProcessCacheEntry) ParentScope() (eval.VariableScope, bool) {
259259
return pc.Ancestor, pc.Ancestor != nil
260260
}
261+
262+
func (e *Event) initPlatformPointerFields() {}

pkg/security/seclwin/model/accessors_helpers.go

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/security/seclwin/model/accessors_win.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)