blob: 168d5ae77914b2f64303199c01b9dbf62e420fe1 [file] [log] [blame]
Don Newton98fd8812019-09-23 15:15:02 -04001// Copyright 2018 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
Don Newton98fd8812019-09-23 15:15:02 -04005package unix
6
7import (
8 "syscall"
9 "unsafe"
10)
11
12// Unveil implements the unveil syscall.
13// For more information see unveil(2).
14// Note that the special case of blocking further
15// unveil calls is handled by UnveilBlock.
16func Unveil(path string, flags string) error {
17 pathPtr, err := syscall.BytePtrFromString(path)
18 if err != nil {
19 return err
20 }
21 flagsPtr, err := syscall.BytePtrFromString(flags)
22 if err != nil {
23 return err
24 }
25 _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0)
26 if e != 0 {
27 return e
28 }
29 return nil
30}
31
32// UnveilBlock blocks future unveil calls.
33// For more information see unveil(2).
34func UnveilBlock() error {
35 // Both pointers must be nil.
36 var pathUnsafe, flagsUnsafe unsafe.Pointer
37 _, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0)
38 if e != 0 {
39 return e
40 }
41 return nil
42}