cubefs
1// 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
5package 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 {
17pathPtr, err := syscall.BytePtrFromString(path)
18if err != nil {
19return err
20}
21flagsPtr, err := syscall.BytePtrFromString(flags)
22if err != nil {
23return err
24}
25_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0)
26if e != 0 {
27return e
28}
29return 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.
36var pathUnsafe, flagsUnsafe unsafe.Pointer
37_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0)
38if e != 0 {
39return e
40}
41return nil
42}
43