Skip to content

Commit

Permalink
Merge pull request #46626 from AkihiroSuda/cherrypick-46564-24
Browse files Browse the repository at this point in the history
[24.0 backport] Limit OOMScoreAdj when running in UserNS ("Rootful-in-Rootless")
  • Loading branch information
thaJeztah committed Oct 12, 2023
2 parents a27bf46 + 58c1c7b commit f9b8a35
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 0 deletions.
11 changes: 11 additions & 0 deletions daemon/oci_linux.go
Expand Up @@ -113,6 +113,15 @@ func WithRootless(daemon *Daemon) coci.SpecOpts {
}
}

// withRootfulInRootless is used for "rootful-in-rootless" dind;
// the daemon is running in UserNS but has no access to RootlessKit API socket, host filesystem, etc.
func withRootfulInRootless(daemon *Daemon, daemonCfg *dconfig.Config) coci.SpecOpts {
return func(_ context.Context, _ coci.Client, _ *containers.Container, s *coci.Spec) error {
specconv.ToRootfulInRootless(s)
return nil
}
}

// WithOOMScore sets the oom score
func WithOOMScore(score *int) coci.SpecOpts {
return func(ctx context.Context, _ coci.Client, _ *containers.Container, s *coci.Spec) error {
Expand Down Expand Up @@ -1091,6 +1100,8 @@ func (daemon *Daemon) createSpec(ctx context.Context, c *container.Container) (r
}
if daemon.configStore.Rootless {
opts = append(opts, WithRootless(daemon))
} else if userns.RunningInUserNS() {
opts = append(opts, withRootfulInRootless(daemon, daemon.configStore))
}

var snapshotter, snapshotKey string
Expand Down
14 changes: 14 additions & 0 deletions pkg/rootless/specconv/specconv_linux.go
Expand Up @@ -12,6 +12,20 @@ import (
"github.com/sirupsen/logrus"
)

// ToRootfulInRootless is used for "rootful-in-rootless" dind;
// the daemon is running in UserNS but has no access to RootlessKit API socket, host filesystem, etc.
//
// This fuction does:
// * Fix up OOMScoreAdj (needed since systemd v250: https://github.com/moby/moby/issues/46563)
func ToRootfulInRootless(spec *specs.Spec) {
if spec.Process == nil || spec.Process.OOMScoreAdj == nil {
return
}
if currentOOMScoreAdj := getCurrentOOMScoreAdj(); *spec.Process.OOMScoreAdj < currentOOMScoreAdj {
*spec.Process.OOMScoreAdj = currentOOMScoreAdj
}
}

// ToRootless converts spec to be compatible with "rootless" runc.
// * Remove non-supported cgroups
// * Fix up OOMScoreAdj
Expand Down

0 comments on commit f9b8a35

Please sign in to comment.