aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/syscall_linux_arm64.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2020-04-27 17:43:35 -0700
committerIan Lance Taylor <iant@golang.org>2020-04-30 03:32:25 +0000
commitb255c123371caf9238dcc732860a907f3ea744da (patch)
tree7ab78669e62f3153e1360e1723623823233279c7 /src/syscall/syscall_linux_arm64.go
parent769a1cf7b6b79e747e3a4d886992b2a7e54f33d7 (diff)
downloadgo-b255c123371caf9238dcc732860a907f3ea744da.tar.xz
syscall: on linux-arm64, prefer prlimit to {g,s}etrlimit
Reportedly some Docker images accept the prlimit64 system call, used by syscall.prlimit, but prohibit the getrlimit and setrlimit system calls. Fixes #38604 Change-Id: I91ff9370450b4869098cc8e335bbb7b863060508 Reviewed-on: https://go-review.googlesource.com/c/go/+/230339 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Diffstat (limited to 'src/syscall/syscall_linux_arm64.go')
-rw-r--r--src/syscall/syscall_linux_arm64.go22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/syscall/syscall_linux_arm64.go b/src/syscall/syscall_linux_arm64.go
index 6d3b3dfde4..1ad9dd8ea3 100644
--- a/src/syscall/syscall_linux_arm64.go
+++ b/src/syscall/syscall_linux_arm64.go
@@ -28,7 +28,7 @@ func EpollCreate(size int) (fd int, err error) {
//sysnb Getegid() (egid int)
//sysnb Geteuid() (euid int)
//sysnb Getgid() (gid int)
-//sysnb Getrlimit(resource int, rlim *Rlimit) (err error)
+//sysnb getrlimit(resource int, rlim *Rlimit) (err error)
//sysnb Getuid() (uid int)
//sys Listen(s int, n int) (err error)
//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
@@ -41,7 +41,7 @@ func EpollCreate(size int) (fd int, err error) {
//sysnb Setregid(rgid int, egid int) (err error)
//sysnb Setresgid(rgid int, egid int, sgid int) (err error)
//sysnb Setresuid(ruid int, euid int, suid int) (err error)
-//sysnb Setrlimit(resource int, rlim *Rlimit) (err error)
+//sysnb setrlimit(resource int, rlim *Rlimit) (err error)
//sysnb Setreuid(ruid int, euid int) (err error)
//sys Shutdown(fd int, how int) (err error)
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
@@ -171,6 +171,24 @@ func Pipe2(p []int, flags int) (err error) {
return
}
+// Getrlimit prefers the prlimit64 system call. See issue 38604.
+func Getrlimit(resource int, rlim *Rlimit) error {
+ err := prlimit(0, resource, nil, rlim)
+ if err != ENOSYS {
+ return err
+ }
+ return getrlimit(resource, rlim)
+}
+
+// Setrlimit prefers the prlimit64 system call. See issue 38604.
+func Setrlimit(resource int, rlim *Rlimit) error {
+ err := prlimit(0, resource, rlim, nil)
+ if err != ENOSYS {
+ return err
+ }
+ return setrlimit(resource, rlim)
+}
+
func (r *PtraceRegs) PC() uint64 { return r.Pc }
func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }