diff --git a/delete.go b/delete.go index fb6f38eddf7..de8cd7ea6d6 100644 --- a/delete.go +++ b/delete.go @@ -6,7 +6,6 @@ import ( "fmt" "os" "path/filepath" - "syscall" "time" "github.com/opencontainers/runc/libcontainer" @@ -19,7 +18,7 @@ func killContainer(container libcontainer.Container) error { _ = container.Signal(unix.SIGKILL, false) for i := 0; i < 100; i++ { time.Sleep(100 * time.Millisecond) - if err := container.Signal(syscall.Signal(0), false); err != nil { + if err := container.Signal(unix.Signal(0), false); err != nil { destroy(container) return nil } diff --git a/kill.go b/kill.go index 25350f9fcc3..46ea7003b53 100644 --- a/kill.go +++ b/kill.go @@ -6,7 +6,6 @@ import ( "fmt" "strconv" "strings" - "syscall" "github.com/urfave/cli" "golang.org/x/sys/unix" @@ -23,7 +22,7 @@ Where "" is the name for the instance of the container and EXAMPLE: For example, if the container id is "ubuntu01" the following will send a "KILL" signal to the init process of the "ubuntu01" container: - + # runc kill ubuntu01 KILL`, Flags: []cli.Flag{ cli.BoolFlag{ @@ -56,10 +55,10 @@ signal to the init process of the "ubuntu01" container: }, } -func parseSignal(rawSignal string) (syscall.Signal, error) { +func parseSignal(rawSignal string) (unix.Signal, error) { s, err := strconv.Atoi(rawSignal) if err == nil { - return syscall.Signal(s), nil + return unix.Signal(s), nil } sig := strings.ToUpper(rawSignal) if !strings.HasPrefix(sig, "SIG") { diff --git a/libcontainer/cgroups/fs/apply_raw.go b/libcontainer/cgroups/fs/apply_raw.go index df83d41c353..59ce5ea6b78 100644 --- a/libcontainer/cgroups/fs/apply_raw.go +++ b/libcontainer/cgroups/fs/apply_raw.go @@ -8,7 +8,6 @@ import ( "os" "path/filepath" "sync" - "syscall" "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/configs" @@ -118,7 +117,7 @@ func isIgnorableError(rootless bool, err error) bool { return true } // Handle some specific syscall errors. - var errno syscall.Errno + var errno unix.Errno if errors.As(err, &errno) { return errno == unix.EROFS || errno == unix.EPERM || errno == unix.EACCES } diff --git a/libcontainer/cgroups/fscommon/fscommon.go b/libcontainer/cgroups/fscommon/fscommon.go index dc53987e0a2..46e06dc62d3 100644 --- a/libcontainer/cgroups/fscommon/fscommon.go +++ b/libcontainer/cgroups/fscommon/fscommon.go @@ -5,11 +5,11 @@ package fscommon import ( "io/ioutil" "os" - "syscall" securejoin "github.com/cyphar/filepath-securejoin" "github.com/pkg/errors" "github.com/sirupsen/logrus" + "golang.org/x/sys/unix" ) func WriteFile(dir, file, data string) error { @@ -41,20 +41,10 @@ func ReadFile(dir, file string) (string, error) { func retryingWriteFile(filename string, data []byte, perm os.FileMode) error { for { err := ioutil.WriteFile(filename, data, perm) - if isInterruptedWriteFile(err) { + if errors.Is(err, unix.EINTR) { logrus.Infof("interrupted while writing %s to %s", string(data), filename) continue } return err } } - -func isInterruptedWriteFile(err error) bool { - if patherr, ok := err.(*os.PathError); ok { - errno, ok2 := patherr.Err.(syscall.Errno) - if ok2 && errno == syscall.EINTR { - return true - } - } - return false -} diff --git a/libcontainer/container_linux.go b/libcontainer/container_linux.go index d2be68fb178..23484ed2e74 100644 --- a/libcontainer/container_linux.go +++ b/libcontainer/container_linux.go @@ -16,7 +16,6 @@ import ( "reflect" "strings" "sync" - "syscall" // only for SysProcAttr and Signal "time" securejoin "github.com/cyphar/filepath-securejoin" @@ -309,7 +308,7 @@ func awaitFifoOpen(path string) <-chan openResult { func fifoOpen(path string, block bool) openResult { flags := os.O_RDONLY if !block { - flags |= syscall.O_NONBLOCK + flags |= unix.O_NONBLOCK } f, err := os.OpenFile(path, flags, 0) if err != nil { @@ -480,7 +479,7 @@ func (c *linuxContainer) commandTemplate(p *Process, childInitPipe *os.File, chi cmd.Stderr = p.Stderr cmd.Dir = c.config.Rootfs if cmd.SysProcAttr == nil { - cmd.SysProcAttr = &syscall.SysProcAttr{} + cmd.SysProcAttr = &unix.SysProcAttr{} } cmd.Env = append(cmd.Env, fmt.Sprintf("GOMAXPROCS=%s", os.Getenv("GOMAXPROCS"))) cmd.ExtraFiles = append(cmd.ExtraFiles, p.ExtraFiles...) @@ -506,7 +505,7 @@ func (c *linuxContainer) commandTemplate(p *Process, childInitPipe *os.File, chi // PID1 the pdeathsig is being delivered to the container's init process by the kernel for some reason // even with the parent still running. if c.config.ParentDeathSignal > 0 { - cmd.SysProcAttr.Pdeathsig = syscall.Signal(c.config.ParentDeathSignal) + cmd.SysProcAttr.Pdeathsig = unix.Signal(c.config.ParentDeathSignal) } return cmd } @@ -1005,8 +1004,8 @@ func (c *linuxContainer) Checkpoint(criuOpts *CriuOpts) error { // CRIU expects the information about an external namespace // like this: --external net[]: // This is always 'extRootNetNS'. - var netns syscall.Stat_t - err = syscall.Stat(nsPath, &netns) + var netns unix.Stat_t + err = unix.Stat(nsPath, &netns) if err != nil { return err } @@ -1857,7 +1856,7 @@ func (c *linuxContainer) isPaused() (bool, error) { data, err := ioutil.ReadFile(filepath.Join(fcg, filename)) if err != nil { // If freezer cgroup is not mounted, the container would just be not paused. - if os.IsNotExist(err) || errors.Is(err, syscall.ENODEV) { + if os.IsNotExist(err) || errors.Is(err, unix.ENODEV) { return false, nil } return false, newSystemErrorWithCause(err, "checking if container is paused") diff --git a/libcontainer/init_linux.go b/libcontainer/init_linux.go index c1b1560020e..f7b4b892e7e 100644 --- a/libcontainer/init_linux.go +++ b/libcontainer/init_linux.go @@ -10,7 +10,6 @@ import ( "net" "os" "strings" - "syscall" // only for Errno "unsafe" "golang.org/x/sys/unix" @@ -455,7 +454,7 @@ func isWaitable(pid int) (bool, error) { // isNoChildren returns true if err represents a unix.ECHILD (formerly syscall.ECHILD) false otherwise func isNoChildren(err error) bool { switch err := err.(type) { - case syscall.Errno: + case unix.Errno: if err == unix.ECHILD { return true } diff --git a/libcontainer/process_linux.go b/libcontainer/process_linux.go index 51e54acae10..a18cfa572ba 100644 --- a/libcontainer/process_linux.go +++ b/libcontainer/process_linux.go @@ -11,7 +11,6 @@ import ( "os/exec" "path/filepath" "strconv" - "syscall" // only for Signal "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/configs" @@ -76,7 +75,7 @@ func (p *setnsProcess) startTime() (uint64, error) { } func (p *setnsProcess) signal(sig os.Signal) error { - s, ok := sig.(syscall.Signal) + s, ok := sig.(unix.Signal) if !ok { return errors.New("os: unsupported signal type") } @@ -506,7 +505,7 @@ func (p *initProcess) createNetworkInterfaces() error { } func (p *initProcess) signal(sig os.Signal) error { - s, ok := sig.(syscall.Signal) + s, ok := sig.(unix.Signal) if !ok { return errors.New("os: unsupported signal type") } diff --git a/libcontainer/standard_init_linux.go b/libcontainer/standard_init_linux.go index 4e03b8bc058..da478c5959d 100644 --- a/libcontainer/standard_init_linux.go +++ b/libcontainer/standard_init_linux.go @@ -7,7 +7,6 @@ import ( "os" "os/exec" "runtime" - "syscall" //only for Exec "github.com/opencontainers/runc/libcontainer/apparmor" "github.com/opencontainers/runc/libcontainer/configs" @@ -207,7 +206,7 @@ func (l *linuxStandardInit) Init() error { return newSystemErrorWithCause(err, "init seccomp") } } - if err := syscall.Exec(name, l.config.Args[0:], os.Environ()); err != nil { + if err := unix.Exec(name, l.config.Args[0:], os.Environ()); err != nil { return newSystemErrorWithCause(err, "exec user process") } return nil diff --git a/libcontainer/system/linux.go b/libcontainer/system/linux.go index a4ae8901acc..7548969a6f9 100644 --- a/libcontainer/system/linux.go +++ b/libcontainer/system/linux.go @@ -5,7 +5,6 @@ package system import ( "os" "os/exec" - "syscall" // only for exec "unsafe" "github.com/opencontainers/runc/libcontainer/user" @@ -51,7 +50,7 @@ func Execv(cmd string, args []string, env []string) error { return err } - return syscall.Exec(name, args, env) + return unix.Exec(name, args, env) } func Prlimit(pid, resource int, limit unix.Rlimit) error { diff --git a/signals.go b/signals.go index dd25e094ce4..5682989c62c 100644 --- a/signals.go +++ b/signals.go @@ -5,7 +5,6 @@ package main import ( "os" "os/signal" - "syscall" // only for Signal "github.com/opencontainers/runc/libcontainer" "github.com/opencontainers/runc/libcontainer/system" @@ -103,7 +102,7 @@ func (h *signalHandler) forward(process *libcontainer.Process, tty *tty, detach } default: logrus.Debugf("sending signal to process %s", s) - if err := unix.Kill(pid1, s.(syscall.Signal)); err != nil { + if err := unix.Kill(pid1, s.(unix.Signal)); err != nil { logrus.Error(err) } }