]> Cypherpunks.ru repositories - gostls13.git/commitdiff
syscall: fix skipping TestUseCgroupFD
authorKir Kolyshkin <kolyshkin@gmail.com>
Thu, 17 Aug 2023 00:45:14 +0000 (17:45 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 1 Sep 2023 04:33:32 +0000 (04:33 +0000)
The check in prepareCgroupFD tried to find out if clone3 with
CLONE_INTO_CGROUP flag is supported, by supplying arguments in
SysProcAttr that will make ForkExec use clone3 with CLONE_INTO_CGROUP
and fail.

CL 456375 inadvertently broke the above check by adding more errno
values to ignore. As a result, TestUseCgroupFD is always skipped, even
when the test could in fact be run.

Fix by removing the check entirely, instead let's use the functionality
and figure out from the errno if this has failed because of unsupported
syscall, lack of permissions, or other reason.

Change-Id: I108b27b6cfeec390ebd3f161ac39e8597569b666
Reviewed-on: https://go-review.googlesource.com/c/go/+/520265
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Run-TryBot: Kirill Kolyshkin <kolyshkin@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
src/syscall/exec_linux_test.go

index 873ae4f9151a34cc268ed66d84098f84e39bb0a4..33fa79a81d9abc6867d5025069defdda32318d66 100644 (file)
@@ -410,17 +410,6 @@ func prepareCgroupFD(t *testing.T) (int, string) {
                t.Skipf("cgroup v2 not available (/proc/self/cgroup contents: %q)", selfCg)
        }
 
-       // Need clone3 with CLONE_INTO_CGROUP support.
-       _, err = syscall.ForkExec("non-existent binary", nil, &syscall.ProcAttr{
-               Sys: &syscall.SysProcAttr{
-                       UseCgroupFD: true,
-                       CgroupFD:    -1,
-               },
-       })
-       if testenv.SyscallIsNotSupported(err) {
-               t.Skipf("clone3 with CLONE_INTO_CGROUP not available: %v", err)
-       }
-
        // Need an ability to create a sub-cgroup.
        subCgroup, err := os.MkdirTemp(prefix+string(bytes.TrimSpace(cg)), "subcg-")
        if err != nil {
@@ -459,6 +448,13 @@ func TestUseCgroupFD(t *testing.T) {
        }
        out, err := cmd.CombinedOutput()
        if err != nil {
+               if err != syscall.EINVAL && testenv.SyscallIsNotSupported(err) {
+                       // Can be one of:
+                       // - clone3 not supported (old kernel);
+                       // - clone3 not allowed (by e.g. seccomp);
+                       // - lack of CAP_SYS_ADMIN.
+                       t.Skipf("clone3 with CLONE_INTO_CGROUP not available: %v", err)
+               }
                t.Fatalf("Cmd failed with err %v, output: %s", err, out)
        }
        // NB: this wouldn't work with cgroupns.