aboutsummaryrefslogtreecommitdiff
path: root/src/syscall
diff options
context:
space:
mode:
authorKir Kolyshkin <kolyshkin@gmail.com>2024-05-23 13:32:50 -0700
committerGopher Robot <gobot@golang.org>2024-05-24 21:10:10 +0000
commit22a80e78ea6d65cd0b0726b2907f31b884aeda93 (patch)
treead11a2c5770aa6c29dbe01f9765a7f40d3bcdb23 /src/syscall
parent5c7d7745387f240dbbd31940dce8be2b3000c53d (diff)
downloadgo-22a80e78ea6d65cd0b0726b2907f31b884aeda93.tar.xz
syscall: Setrlimit: always clean rlimitNofileCache
Since the introduction of origRlimitNofileCache in CL 476097 the only way to disable restoring RLIMIT_NOFILE before calling execve syscall (os.StartProcess etc) is this: var r syscall.Rlimit syscall.Getrlimit(syscall.RLIMIT_NOFILE, &r) syscall.Setrlimit(syscall.RLIMIT_NOFILE, &r) The problem is, this only works when setrlimit syscall succeeds, which is not possible in some scenarios. Let's assume that if a user calls syscall.Setrlimit, they unconditionally want to disable restoring the original rlimit. For #66797. Change-Id: I20d0365df4bd6a5c3cc8c22b0c0db87a25b52746 Reviewed-on: https://go-review.googlesource.com/c/go/+/588076 Run-TryBot: Kirill Kolyshkin <kolyshkin@gmail.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> TryBot-Bypass: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/syscall')
-rw-r--r--src/syscall/rlimit.go5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/syscall/rlimit.go b/src/syscall/rlimit.go
index 9547ce8f6d..f94b894b90 100644
--- a/src/syscall/rlimit.go
+++ b/src/syscall/rlimit.go
@@ -50,11 +50,10 @@ func init() {
}
func Setrlimit(resource int, rlim *Rlimit) error {
- err := setrlimit(resource, rlim)
- if err == nil && resource == RLIMIT_NOFILE {
+ if resource == RLIMIT_NOFILE {
// Store nil in origRlimitNofile to tell StartProcess
// to not adjust the rlimit in the child process.
origRlimitNofile.Store(nil)
}
- return err
+ return setrlimit(resource, rlim)
}