mirror of
https://github.com/opencontainers/runc.git
synced 2025-10-09 01:10:15 +08:00

It turns out that the standard "syscall" library is not recommended for new programs. runC will need to eventually move to this, but for now include it in vendor so we can use it for new features. Signed-off-by: Aleksa Sarai <asarai@suse.de>
39 lines
889 B
Go
39 lines
889 B
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build openbsd
|
|
// +build 386 amd64 arm
|
|
|
|
package unix
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
const (
|
|
SYS_PLEDGE = 108
|
|
)
|
|
|
|
// Pledge implements the pledge syscall. For more information see pledge(2).
|
|
func Pledge(promises string, paths []string) error {
|
|
promisesPtr, err := syscall.BytePtrFromString(promises)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
promisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)
|
|
if paths != nil {
|
|
var pathsPtr []*byte
|
|
if pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {
|
|
return err
|
|
}
|
|
pathsUnsafe = unsafe.Pointer(&pathsPtr[0])
|
|
}
|
|
_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)
|
|
if e != 0 {
|
|
return e
|
|
}
|
|
return nil
|
|
}
|