]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: use Android O friendly faccessat syscall on linux/amd64
authorTobias Klauser <tklauser@distanz.ch>
Thu, 15 Mar 2018 09:21:57 +0000 (10:21 +0100)
committerTobias Klauser <tobias.klauser@gmail.com>
Thu, 15 Mar 2018 10:07:19 +0000 (10:07 +0000)
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>
src/runtime/sys_linux_amd64.s

index 39003498d5fbb70ddafa9398e8fe4102ebdef543..e03f7ce44c594adbc1c82791a47fb7794086fa89 100644 (file)
@@ -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
@@ -43,6 +42,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
@@ -687,9 +687,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