From 9456040acb746dccf65e700563fb7371a03f79e6 Mon Sep 17 00:00:00 2001 From: Seth Pellegrino Date: Fri, 10 Jan 2020 14:26:03 -0800 Subject: [PATCH 1/2] fix: eventfd leak Only start watching the cgroup for OOMs when the first process starts instead of on every process. Signed-off-by: Seth Pellegrino --- runtime/v2/runc/v1/service.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/runtime/v2/runc/v1/service.go b/runtime/v2/runc/v1/service.go index 14af5fe5498b..fcc753613121 100644 --- a/runtime/v2/runc/v1/service.go +++ b/runtime/v2/runc/v1/service.go @@ -271,15 +271,15 @@ func (s *service) Start(ctx context.Context, r *taskAPI.StartRequest) (*taskAPI. s.eventSendMu.Unlock() return nil, errdefs.ToGRPC(err) } - if cg, ok := container.Cgroup().(cgroups.Cgroup); ok { - if err := s.ep.Add(container.ID, cg); err != nil { - logrus.WithError(err).Error("add cg to OOM monitor") - } - } else { - logrus.WithError(errdefs.ErrNotImplemented).Error("add cg to OOM monitor") - } switch r.ExecID { case "": + if cg, ok := container.Cgroup().(cgroups.Cgroup); ok { + if err := s.ep.Add(container.ID, cg); err != nil { + logrus.WithError(err).Error("add cg to OOM monitor") + } + } else { + logrus.WithError(errdefs.ErrNotImplemented).Error("add cg to OOM monitor") + } s.send(&eventstypes.TaskStart{ ContainerID: container.ID, Pid: uint32(p.Pid()), From 66508589d33c3ae0ad3db5a581c75c8257bc4bfc Mon Sep 17 00:00:00 2001 From: Seth Pellegrino Date: Mon, 13 Jan 2020 10:49:11 -0800 Subject: [PATCH 2/2] fix: eventfd leak for v2 runtime with v1 cgroups There's no OOM monitoring for the v2 cgroups yet, so it seems unlikely that there was a leak in that case. Signed-off-by: Seth Pellegrino --- runtime/v2/runc/v2/service.go | 37 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/runtime/v2/runc/v2/service.go b/runtime/v2/runc/v2/service.go index 1e7053b72615..06eaaed6e7a8 100644 --- a/runtime/v2/runc/v2/service.go +++ b/runtime/v2/runc/v2/service.go @@ -330,27 +330,28 @@ func (s *service) Start(ctx context.Context, r *taskAPI.StartRequest) (*taskAPI. s.eventSendMu.Unlock() return nil, errdefs.ToGRPC(err) } - switch cg := container.Cgroup().(type) { - case cgroups.Cgroup: - if err := s.ep.Add(container.ID, cg); err != nil { - logrus.WithError(err).Error("add cg to OOM monitor") - } - case *cgroupsv2.Manager: - allControllers, err := cg.RootControllers() - if err != nil { - logrus.WithError(err).Error("failed to get root controllers") - } else { - if err := cg.ToggleControllers(allControllers, cgroupsv2.Enable); err != nil { - logrus.WithError(err).Errorf("failed to enable controllers (%v)", allControllers) - } - } - - // OOM monitor is not implemented yet - logrus.WithError(errdefs.ErrNotImplemented).Warn("add cg to OOM monitor") - } switch r.ExecID { case "": + switch cg := container.Cgroup().(type) { + case cgroups.Cgroup: + if err := s.ep.Add(container.ID, cg); err != nil { + logrus.WithError(err).Error("add cg to OOM monitor") + } + case *cgroupsv2.Manager: + allControllers, err := cg.RootControllers() + if err != nil { + logrus.WithError(err).Error("failed to get root controllers") + } else { + if err := cg.ToggleControllers(allControllers, cgroupsv2.Enable); err != nil { + logrus.WithError(err).Errorf("failed to enable controllers (%v)", allControllers) + } + } + + // OOM monitor is not implemented yet + logrus.WithError(errdefs.ErrNotImplemented).Warn("add cg to OOM monitor") + } + s.send(&eventstypes.TaskStart{ ContainerID: container.ID, Pid: uint32(p.Pid()),