diff options
| author | Kir Kolyshkin <kolyshkin@gmail.com> | 2024-05-23 13:32:50 -0700 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-05-24 21:10:10 +0000 |
| commit | 22a80e78ea6d65cd0b0726b2907f31b884aeda93 (patch) | |
| tree | ad11a2c5770aa6c29dbe01f9765a7f40d3bcdb23 /src/syscall | |
| parent | 5c7d7745387f240dbbd31940dce8be2b3000c53d (diff) | |
| download | go-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.go | 5 |
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) } |
