]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.10] syscall: use Android O friendly fstatat syscall to implement...
authorTobias Klauser <tklauser@distanz.ch>
Thu, 15 Mar 2018 09:45:51 +0000 (10:45 +0100)
committerAndrew Bonventre <andybons@golang.org>
Thu, 29 Mar 2018 06:08:23 +0000 (06:08 +0000)
The Android O seccomp policy disallows the stat syscall on amd64, see
https://android.googlesource.com/platform/bionic/+/android-4.2.2_r1.2/libc/SYSCALLS.TXT

Use the fstatat syscall with AT_FDCWD and zero flags instead to achieve
the same behavior.

Fixes #24403

Change-Id: I36fc9ec9bc938cd8e9de30f66c0eb9d2e24debf6
Reviewed-on: https://go-review.googlesource.com/100878
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-on: https://go-review.googlesource.com/102976
Run-TryBot: Andrew Bonventre <andybons@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/syscall/syscall_linux_amd64.go
src/syscall/zsyscall_linux_amd64.go

index 4b4aa6d4144ec3b475da4aa0184503025f1fb9b6..78c3e8f05ae9a3df7caf956bd2f1e2370a705c88 100644 (file)
@@ -39,7 +39,6 @@ const (
 //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)
-//sys  Stat(path string, stat *Stat_t) (err error)
 //sys  Statfs(path string, buf *Statfs_t) (err error)
 //sys  SyncFileRange(fd int, off int64, n int64, flags int) (err error)
 //sys  Truncate(path string, length int64) (err error)
@@ -47,6 +46,7 @@ const (
 //sys  accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)
 //sys  bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
 //sys  connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)
+//sys  fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT
 //sysnb        getgroups(n int, list *_Gid_t) (nn int, err error)
 //sysnb        setgroups(n int, list *_Gid_t) (err error)
 //sys  getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)
@@ -61,6 +61,10 @@ const (
 //sys  sendmsg(s int, msg *Msghdr, flags int) (n int, err error)
 //sys  mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)
 
+func Stat(path string, stat *Stat_t) (err error) {
+       return fstatat(_AT_FDCWD, path, stat, 0)
+}
+
 //go:noescape
 func gettimeofday(tv *Timeval) (err Errno)
 
index 6545d1a159671a6fa0799b0878caa4ca85f29a56..47ea5974438057276cfcb50fb63ce9e7e4501c74 100644 (file)
@@ -1476,21 +1476,6 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Stat(path string, stat *Stat_t) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
-       if e1 != 0 {
-               err = errnoErr(e1)
-       }
-       return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Statfs(path string, buf *Statfs_t) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
@@ -1573,6 +1558,21 @@ func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func getgroups(n int, list *_Gid_t) (nn int, err error) {
        r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)
        nn = int(r0)