blob: db4f72ea9c41a764682c463ca24378a87a17709c [file] [log] [blame]
David K. Bainbridge215e0242017-09-05 23:18:24 -07001// 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}