diff options
Diffstat (limited to 'src/syscall/exec_freebsd.go')
-rw-r--r-- | src/syscall/exec_freebsd.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/syscall/exec_freebsd.go b/src/syscall/exec_freebsd.go index 851b8fbd06..b4132ca3f3 100644 --- a/src/syscall/exec_freebsd.go +++ b/src/syscall/exec_freebsd.go @@ -66,6 +66,8 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr i int ) + rlim, rlimOK := origRlimitNofile.Load().(Rlimit) + // Record parent PID so child can test if it has died. ppid, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) @@ -283,6 +285,11 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr } } + // Restore original rlimit. + if rlimOK && rlim.Cur != 0 { + RawSyscall(SYS_SETRLIMIT, uintptr(RLIMIT_NOFILE), uintptr(unsafe.Pointer(&rlim)), 0) + } + // Time to exec. _, _, err1 = RawSyscall(SYS_EXECVE, uintptr(unsafe.Pointer(argv0)), |