Skip to content

Commit 9ba4990

Browse files
committed
fix(grpc/exec): balance RefDec in exit's eventcache path with exec's RefInc
1 parent eb584c9 commit 9ba4990

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

pkg/grpc/exec/exec.go

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -520,15 +520,13 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
520520
proc, parent := process.GetParentProcessInternal(msg.ProcessKey.Pid, timestamp)
521521
var err error
522522

523-
if option.Config.EnableProcessAncestors && proc.NeededAncestors() && !msg.RefCntDone[AncestorsRefCnt] {
523+
if option.Config.EnableProcessAncestors && proc.NeededAncestors() {
524524
if ancestors, perr := process.GetAncestorProcessesInternal(proc.UnsafeGetProcess().ParentExecId); perr == nil {
525525
var tetragonAncestors []*tetragon.Process
526526
for _, ancestor := range ancestors {
527527
tetragonAncestors = append(tetragonAncestors, ancestor.UnsafeGetProcess())
528-
ancestor.RefDec("ancestor")
529528
}
530529
ev.SetAncestors(tetragonAncestors)
531-
msg.RefCntDone[AncestorsRefCnt] = true
532530
} else {
533531
eventcache.CacheRetries(eventcache.AncestorsInfo).Inc()
534532
err = eventcache.ErrFailedToGetAncestorsInfo
@@ -537,10 +535,6 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
537535

538536
if parent != nil {
539537
ev.SetParent(parent.UnsafeGetProcess())
540-
if !msg.RefCntDone[ParentRefCnt] {
541-
parent.RefDec("parent")
542-
msg.RefCntDone[ParentRefCnt] = true
543-
}
544538
} else {
545539
eventcache.CacheRetries(eventcache.ParentInfo).Inc()
546540
err = eventcache.ErrFailedToGetParentInfo
@@ -549,10 +543,6 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
549543
if proc != nil {
550544
// Use cached version of the process
551545
ev.SetProcess(proc.UnsafeGetProcess())
552-
if !msg.RefCntDone[ProcessRefCnt] {
553-
proc.RefDec("process")
554-
msg.RefCntDone[ProcessRefCnt] = true
555-
}
556546
} else {
557547
eventcache.CacheRetries(eventcache.ProcessInfo).Inc()
558548
err = eventcache.ErrFailedToGetProcessInfo
@@ -565,7 +555,34 @@ func (msg *MsgExitEventUnix) RetryInternal(ev notify.Event, timestamp uint64) (*
565555
}
566556

567557
func (msg *MsgExitEventUnix) Retry(internal *process.ProcessInternal, ev notify.Event) error {
568-
return eventcache.HandleGenericEvent(internal, ev, nil)
558+
if err := eventcache.HandleGenericEvent(internal, ev, nil); err != nil {
559+
return err
560+
}
561+
562+
tetragonProcess := ev.GetProcess()
563+
564+
if option.Config.EnableProcessAncestors && !msg.RefCntDone[AncestorsRefCnt] {
565+
if ancestors, err := process.GetAncestorProcessesInternal(tetragonProcess.ParentExecId); err == nil {
566+
for _, ancestor := range ancestors {
567+
ancestor.RefDec("ancestor")
568+
}
569+
msg.RefCntDone[AncestorsRefCnt] = true
570+
}
571+
}
572+
573+
if tetragonProcess.Pid.Value > 1 && !msg.RefCntDone[ParentRefCnt] {
574+
if parent, _ := process.Get(tetragonProcess.ParentExecId); parent != nil {
575+
parent.RefDec("parent")
576+
msg.RefCntDone[ParentRefCnt] = true
577+
}
578+
}
579+
580+
if !msg.RefCntDone[ProcessRefCnt] {
581+
internal.RefDec("process")
582+
msg.RefCntDone[ProcessRefCnt] = true
583+
}
584+
585+
return nil
569586
}
570587

571588
func (msg *MsgExitEventUnix) HandleMessage() *tetragon.GetEventsResponse {

0 commit comments

Comments
 (0)