openbsd_pledge.go

 1// Copyright 2016 The Go Authors. All rights reserved.
 2// Use of this source code is governed by a BSD-style
 3// license that can be found in the LICENSE file.
 4
 5// +build openbsd
 6// +build 386 amd64 arm
 7
 8package unix
 9
10import (
11	"syscall"
12	"unsafe"
13)
14
15const (
16	_SYS_PLEDGE = 108
17)
18
19// Pledge implements the pledge syscall. For more information see pledge(2).
20func Pledge(promises string, paths []string) error {
21	promisesPtr, err := syscall.BytePtrFromString(promises)
22	if err != nil {
23		return err
24	}
25	promisesUnsafe, pathsUnsafe := unsafe.Pointer(promisesPtr), unsafe.Pointer(nil)
26	if paths != nil {
27		var pathsPtr []*byte
28		if pathsPtr, err = syscall.SlicePtrFromStrings(paths); err != nil {
29			return err
30		}
31		pathsUnsafe = unsafe.Pointer(&pathsPtr[0])
32	}
33	_, _, e := syscall.Syscall(_SYS_PLEDGE, uintptr(promisesUnsafe), uintptr(pathsUnsafe), 0)
34	if e != 0 {
35		return e
36	}
37	return nil
38}