diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2018-03-15 10:21:57 +0100 |
---|---|---|
committer | Andrew Bonventre <andybons@golang.org> | 2018-03-29 06:08:18 +0000 |
commit | 8d90bb4b199261000c0011348eeac5e4ad642f1d (patch) | |
tree | a30e1174ab863c6d729c868d171d73b3be8a64cb | |
parent | 24879947d5ad7fda983a098f651130b6bfaa750f (diff) | |
download | go-8d90bb4b199261000c0011348eeac5e4ad642f1d.tar.gz go-8d90bb4b199261000c0011348eeac5e4ad642f1d.zip |
[release-branch.go1.10] runtime: use Android O friendly faccessat syscall on linux/amd64
The Android O seccomp policy disallows the access syscall on amd64, see
https://android.googlesource.com/platform/bionic/+/android-4.2.2_r1.2/libc/SYSCALLS.TXT
Use the faccessat syscall with AT_FDCWD instead to achieve the same
behavior.
Updates #24403
Change-Id: I9db847c1c0f33987a3479b3f96e721fb9588cde2
Reviewed-on: https://go-review.googlesource.com/100877
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-on: https://go-review.googlesource.com/102995
Run-TryBot: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r-- | src/runtime/sys_linux_amd64.s | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/runtime/sys_linux_amd64.s b/src/runtime/sys_linux_amd64.s index 576a91a85c..a5db5cba23 100644 --- a/src/runtime/sys_linux_amd64.s +++ b/src/runtime/sys_linux_amd64.s @@ -21,7 +21,6 @@ #define SYS_rt_sigaction 13 #define SYS_rt_sigprocmask 14 #define SYS_rt_sigreturn 15 -#define SYS_access 21 #define SYS_sched_yield 24 #define SYS_mincore 27 #define SYS_madvise 28 @@ -44,6 +43,7 @@ #define SYS_exit_group 231 #define SYS_epoll_ctl 233 #define SYS_openat 257 +#define SYS_faccessat 269 #define SYS_pselect6 270 #define SYS_epoll_pwait 281 #define SYS_epoll_create1 291 @@ -682,9 +682,12 @@ TEXT runtime·closeonexec(SB),NOSPLIT,$0 // int access(const char *name, int mode) TEXT runtime·access(SB),NOSPLIT,$0 - MOVQ name+0(FP), DI - MOVL mode+8(FP), SI - MOVL $SYS_access, AX + // This uses faccessat instead of access, because Android O blocks access. + MOVL $AT_FDCWD, DI // AT_FDCWD, so this acts like access + MOVQ name+0(FP), SI + MOVL mode+8(FP), DX + MOVL $0, R10 + MOVL $SYS_faccessat, AX SYSCALL MOVL AX, ret+16(FP) RET |