Add sentry/task_exit point

Updates #4805

PiperOrigin-RevId: 445222912
This commit is contained in:
Fabricio Voznika
2022-04-28 12:45:48 -07:00
committed by gVisor bot
parent 9f41bb6d62
commit e1c4bbccf9
7 changed files with 46 additions and 0 deletions
+3
View File
@@ -7,6 +7,9 @@
},
{
"name": "sentry/clone"
},
{
"name": "sentry/task_exit"
}
],
"sinks": [
+1
View File
@@ -72,6 +72,7 @@ std::map<std::string, Callback> dispatchers = {
{"gvisor.sentry.ExecveInfo", unpack<::gvisor::sentry::ExecveInfo>},
{"gvisor.sentry.ExitNotifyParentInfo",
unpack<::gvisor::sentry::ExitNotifyParentInfo>},
{"gvisor.sentry.TaskExit", unpack<::gvisor::sentry::TaskExit>},
};
void unpack(const absl::string_view buf) {
+15
View File
@@ -204,6 +204,21 @@ type runExitMain struct{}
func (*runExitMain) execute(t *Task) taskRunState {
t.traceExitEvent()
if seccheck.Global.Enabled(seccheck.PointTaskExit) {
info := &pb.TaskExit{
ExitStatus: int32(t.tg.exitStatus),
}
fields := seccheck.Global.GetFieldSet(seccheck.PointTaskExit)
if !fields.Context.Empty() {
info.ContextData = &pb.ContextData{}
LoadSeccheckData(t, fields.Context, info.ContextData)
}
seccheck.Global.SendToCheckers(func(c seccheck.Checker) error {
return c.TaskExit(t, fields, info)
})
}
lastExiter := t.exitThreadGroup()
t.ResetKcov()
@@ -174,6 +174,13 @@ func (r *Remote) ExitNotifyParent(_ context.Context, _ seccheck.FieldSet, info *
return nil
}
// TaskExit implements seccheck.Checker.
func (r *Remote) TaskExit(_ context.Context, _ seccheck.FieldSet, info *pb.TaskExit) error {
r.write(info)
return nil
}
// ContainerStart implements seccheck.Checker.
func (r *Remote) ContainerStart(_ context.Context, _ seccheck.FieldSet, info *pb.Start) error {
r.write(info)
return nil
+5
View File
@@ -192,4 +192,9 @@ func init() {
Name: "sentry/exit_notify_parent",
ContextFields: defaultContextFields,
})
registerPoint(PointDesc{
ID: PointTaskExit,
Name: "sentry/task_exit",
ContextFields: defaultContextFields,
})
}
+8
View File
@@ -65,3 +65,11 @@ message ExitNotifyParentInfo {
// by wait*().
int32 exit_status = 2;
}
message TaskExit {
gvisor.common.ContextData context_data = 1;
// ExitStatus is the exiting thread group's exit status, as reported
// by wait*().
int32 exit_status = 2;
}
+7
View File
@@ -32,6 +32,7 @@ const (
PointExecve
PointExitNotifyParent
PointContainerStart
PointTaskExit
// Add new Points above this line.
pointLength
@@ -117,6 +118,7 @@ type Checker interface {
Clone(ctx context.Context, fields FieldSet, info *pb.CloneInfo) error
Execve(ctx context.Context, fields FieldSet, info *pb.ExecveInfo) error
ExitNotifyParent(ctx context.Context, fields FieldSet, info *pb.ExitNotifyParentInfo) error
TaskExit(context.Context, FieldSet, *pb.TaskExit) error
ContainerStart(context.Context, FieldSet, *pb.Start) error
}
@@ -146,6 +148,11 @@ func (CheckerDefaults) ContainerStart(context.Context, FieldSet, *pb.Start) erro
return nil
}
// TaskExit implements Checker.TaskExit.
func (CheckerDefaults) TaskExit(context.Context, FieldSet, *pb.TaskExit) error {
return nil
}
// PointReq indicates what Point a corresponding Checker runs at, and what
// information it requires at those Points.
type PointReq struct {