diff options
Diffstat (limited to 'ipc')
| -rw-r--r-- | ipc/ipc.go | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ipc/ipc.go b/ipc/ipc.go index d01b6bb3a..360125053 100644 --- a/ipc/ipc.go +++ b/ipc/ipc.go @@ -207,10 +207,11 @@ func createMapping(size int) (f *os.File, mem []byte, err error) { return } f.Close() + fname := f.Name() f, err = os.OpenFile(f.Name(), os.O_RDWR, 0) if err != nil { err = fmt.Errorf("failed to open shm file: %v", err) - os.Remove(f.Name()) + os.Remove(fname) return } mem, err = syscall.Mmap(int(f.Fd()), 0, size, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_SHARED) @@ -253,9 +254,6 @@ func makeCommand(bin []string, timeout time.Duration, flags uint64, inFile *os.F if err != nil { return nil, fmt.Errorf("failed to create temp dir: %v", err) } - if err := os.Chmod(dir, 0777); err != nil { - return nil, fmt.Errorf("failed to chmod temp dir: %v", err) - } c := &command{timeout: timeout, dir: dir} defer func() { @@ -264,6 +262,12 @@ func makeCommand(bin []string, timeout time.Duration, flags uint64, inFile *os.F } }() + if flags&FlagDropPrivs != 0 { + if err := os.Chmod(dir, 0777); err != nil { + return nil, fmt.Errorf("failed to chmod temp dir: %v", err) + } + } + // Output capture pipe. rp, wp, err := os.Pipe() if err != nil { |
