Home | History | Annotate | Download | only in unix
      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 
      8 package unix
      9 
     10 import (
     11 	"syscall"
     12 	"unsafe"
     13 )
     14 
     15 const (
     16 	_SYS_PLEDGE = 108
     17 )
     18 
     19 // Pledge implements the pledge syscall. For more information see pledge(2).
     20 func 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 }
     39