From f2f29d92d603e30bd9133aecf1400150916a42c0 Mon Sep 17 00:00:00 2001 From: Ole Markus With Date: Thu, 20 Feb 2020 20:21:45 +0100 Subject: [PATCH] Properly detect that bpffs has been mounted --- go.mod | 1 + nodeup/pkg/model/BUILD.bazel | 1 + nodeup/pkg/model/network.go | 16 ++++++++-------- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 0293a552b2..75491f11fc 100644 --- a/go.mod +++ b/go.mod @@ -124,6 +124,7 @@ require ( golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 + golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371 google.golang.org/api v0.17.0 gopkg.in/gcfg.v1 v1.2.0 diff --git a/nodeup/pkg/model/BUILD.bazel b/nodeup/pkg/model/BUILD.bazel index e8e852c8e3..0af942bff1 100644 --- a/nodeup/pkg/model/BUILD.bazel +++ b/nodeup/pkg/model/BUILD.bazel @@ -72,6 +72,7 @@ go_library( "//vendor/github.com/aws/aws-sdk-go/aws/session:go_default_library", "//vendor/github.com/aws/aws-sdk-go/service/ec2:go_default_library", "//vendor/github.com/blang/semver:go_default_library", + "//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/nodeup/pkg/model/network.go b/nodeup/pkg/model/network.go index 2f2775a057..e02d9f5cfa 100644 --- a/nodeup/pkg/model/network.go +++ b/nodeup/pkg/model/network.go @@ -18,9 +18,9 @@ package model import ( "fmt" - "os" "path/filepath" + "golang.org/x/sys/unix" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/upup/pkg/fi/nodeup/nodetasks" ) @@ -70,15 +70,15 @@ func (b *NetworkBuilder) Build(c *fi.ModelBuilderContext) error { if networking.Cilium != nil { // systemd v238 includes the bpffs mount by default; and gives an error "has a bad unit file setting" if we try to mount it again (see mount_point_is_api) var alreadyMounted bool - _, err := os.Stat("/sys/fs/bpf") + // bpffs magic number + magic := uint32(0xCAFE4A11) + var fsdata unix.Statfs_t + err := unix.Statfs("/sys/fs/bpf", &fsdata) + if err != nil { - if os.IsNotExist(err) { - alreadyMounted = false - } else { - return fmt.Errorf("error checking for /sys/fs/bpf: %v", err) - } + alreadyMounted = false } else { - alreadyMounted = true + alreadyMounted = int32(magic) == int32(fsdata.Type) } if !alreadyMounted {