]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/testdata/testprog: use testenv.SyscallIsNotSupported to check syscall.Unshare
authorBryan C. Mills <bcmills@google.com>
Wed, 16 Aug 2023 14:46:11 +0000 (10:46 -0400)
committerBryan Mills <bcmills@google.com>
Wed, 16 Aug 2023 16:39:01 +0000 (16:39 +0000)
syscall.Unshare is the sort of system call that may be blocked in a
container environment, and experience has shown that different
container implementations choose from a variety of different error
codes for blocked syscalls.

In particular, the patch in
https://git.alpinelinux.org/aports/tree/community/go/tests-unshare-enosys.patch
seems to suggest that the container environment used to test the Go
distribution on Alpine Linux returns ENOSYS instead of EPERM.

The existing testenv.SyscallIsNotSupported helper checks for
the kinds of error codes we have seen from containers in practice, so
let's use that here.

For #62053.
Updates #29366.

Change-Id: Ic6755f7224fcdc0cb8b25dde2d6047ceb5c3ffdf
Reviewed-on: https://go-review.googlesource.com/c/go/+/520057
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>

src/runtime/testdata/testprog/syscalls_linux.go

index 48f80142374d8609e91136780e92ec972a1c68fd..3939b160df654a3ea5b3ec9001a2b47605d33864 100644 (file)
@@ -7,6 +7,7 @@ package main
 import (
        "bytes"
        "fmt"
+       "internal/testenv"
        "os"
        "syscall"
 )
@@ -44,11 +45,8 @@ func getcwd() (string, error) {
 
 func unshareFs() error {
        err := syscall.Unshare(syscall.CLONE_FS)
-       if err != nil {
-               errno, ok := err.(syscall.Errno)
-               if ok && errno == syscall.EPERM {
-                       return errNotPermitted
-               }
+       if testenv.SyscallIsNotSupported(err) {
+               return errNotPermitted
        }
        return err
 }