rootless: fix getCurrentOOMScoreAdj

`getCurrentOOMScoreAdj()` was broken because `strconv.Atoi()` was called
without trimming "\n".

Fix issue 40068: `rootless docker in kubernetes: "getting the final child's pid from
pipe caused \"EOF\": unknown"

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
This commit is contained in:
Akihiro Suda 2021-03-23 18:11:35 +09:00
parent 7b9275c0da
commit d6ddfb6118
No known key found for this signature in database
GPG key ID: 49524C6F9F638F1A

View file

@ -3,8 +3,10 @@ package specconv // import "github.com/docker/docker/rootless/specconv"
import (
"io/ioutil"
"strconv"
"strings"
specs "github.com/opencontainers/runtime-spec/specs-go"
"github.com/sirupsen/logrus"
)
// ToRootless converts spec to be compatible with "rootless" runc.
@ -19,10 +21,13 @@ func ToRootless(spec *specs.Spec, v2Controllers []string) error {
func getCurrentOOMScoreAdj() int {
b, err := ioutil.ReadFile("/proc/self/oom_score_adj")
if err != nil {
logrus.WithError(err).Warn("failed to read /proc/self/oom_score_adj")
return 0
}
i, err := strconv.Atoi(string(b))
s := string(b)
i, err := strconv.Atoi(strings.TrimSpace(s))
if err != nil {
logrus.WithError(err).Warnf("failed to parse /proc/self/oom_score_adj (%q)", s)
return 0
}
return i