Skip to content

Commit ff18efa

Browse files
ianlancetaylorgopherbot
authored andcommitted
unix: change Setrlimit/Prlimit to always call syscall functions
As of Go 1.21 syscall.Setrlimit and syscall.prlimit can affect starting a new process, by restoring the original NOFILE rlimit. That is recorded locally in the syscall package, so just always call the syscall functions. For golang/go#46279 Change-Id: I2f3dafe5562a7dde1297bad6f5d34a80af5d620b Reviewed-on: https://go-review.googlesource.com/c/sys/+/476695 Run-TryBot: Ian Lance Taylor <[email protected]> Run-TryBot: Ian Lance Taylor <[email protected]> Reviewed-by: Ian Lance Taylor <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Bryan Mills <[email protected]> Auto-Submit: Ian Lance Taylor <[email protected]>
1 parent 494aa49 commit ff18efa

File tree

72 files changed

+17
-618
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+17
-618
lines changed

unix/darwin_amd64_test.go

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/darwin_arm64_test.go

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

unix/syscall_aix_ppc.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
package unix
99

1010
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64
11-
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64
1211
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek64
1312

1413
//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)

unix/syscall_aix_ppc64.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
package unix
99

1010
//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
11-
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
1211
//sys Seek(fd int, offset int64, whence int) (off int64, err error) = lseek
1312

1413
//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64

unix/syscall_darwin.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {
622622
//sys Setprivexec(flag int) (err error)
623623
//sysnb Setregid(rgid int, egid int) (err error)
624624
//sysnb Setreuid(ruid int, euid int) (err error)
625-
//sysnb Setrlimit(which int, lim *Rlimit) (err error)
626625
//sysnb Setsid() (pid int, err error)
627626
//sysnb Settimeofday(tp *Timeval) (err error)
628627
//sysnb Setuid(uid int) (err error)

unix/syscall_dragonfly.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
326326
//sysnb Setreuid(ruid int, euid int) (err error)
327327
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
328328
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
329-
//sysnb Setrlimit(which int, lim *Rlimit) (err error)
330329
//sysnb Setsid() (pid int, err error)
331330
//sysnb Settimeofday(tp *Timeval) (err error)
332331
//sysnb Setuid(uid int) (err error)

unix/syscall_freebsd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,6 @@ func Dup3(oldfd, newfd, flags int) error {
433433
//sysnb Setreuid(ruid int, euid int) (err error)
434434
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
435435
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
436-
//sysnb Setrlimit(which int, lim *Rlimit) (err error)
437436
//sysnb Setsid() (pid int, err error)
438437
//sysnb Settimeofday(tp *Timeval) (err error)
439438
//sysnb Setuid(uid int) (err error)

unix/syscall_linux.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1873,7 +1873,6 @@ func Getpgrp() (pid int) {
18731873
//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error)
18741874
//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
18751875
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
1876-
//sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64
18771876
//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
18781877
//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6
18791878
//sys read(fd int, p []byte) (n int, err error)
@@ -1887,6 +1886,15 @@ func Getpgrp() (pid int) {
18871886
//sysnb Settimeofday(tv *Timeval) (err error)
18881887
//sys Setns(fd int, nstype int) (err error)
18891888

1889+
//go:linkname syscall_prlimit syscall.prlimit
1890+
func syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error
1891+
1892+
func Prlimit(pid, resource int, newlimit, old *Rlimit) error {
1893+
// Just call the syscall version, because as of Go 1.21
1894+
// it will affect starting a new process.
1895+
return syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old))
1896+
}
1897+
18901898
// PrctlRetInt performs a prctl operation specified by option and further
18911899
// optional arguments arg2 through arg5 depending on option. It returns a
18921900
// non-negative integer that is returned by the prctl syscall.

unix/syscall_linux_386.go

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -97,33 +97,6 @@ func Getrlimit(resource int, rlim *Rlimit) (err error) {
9797
return
9898
}
9999

100-
//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT
101-
102-
func Setrlimit(resource int, rlim *Rlimit) (err error) {
103-
err = Prlimit(0, resource, rlim, nil)
104-
if err != ENOSYS {
105-
return err
106-
}
107-
108-
rl := rlimit32{}
109-
if rlim.Cur == rlimInf64 {
110-
rl.Cur = rlimInf32
111-
} else if rlim.Cur < uint64(rlimInf32) {
112-
rl.Cur = uint32(rlim.Cur)
113-
} else {
114-
return EINVAL
115-
}
116-
if rlim.Max == rlimInf64 {
117-
rl.Max = rlimInf32
118-
} else if rlim.Max < uint64(rlimInf32) {
119-
rl.Max = uint32(rlim.Max)
120-
} else {
121-
return EINVAL
122-
}
123-
124-
return setrlimit(resource, &rl)
125-
}
126-
127100
func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
128101
newoffset, errno := seek(fd, offset, whence)
129102
if errno != 0 {

unix/syscall_linux_amd64.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
4646
//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
4747
//sys setfsgid(gid int) (prev int, err error)
4848
//sys setfsuid(uid int) (prev int, err error)
49-
//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
5049
//sys Shutdown(fd int, how int) (err error)
5150
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
5251

0 commit comments

Comments
 (0)