Closed halseth closed 6 years ago
It looks like 04e6ae6bc3ac9739568b0f1225ee5e2d53cba919 was included in go1.10.1: 67b695627005fbd66183e00036450b5c639427a8 and 8d90bb4b199261000c0011348eeac5e4ad642f1d and 1188eb9c5bc67fa7d8dc97f01905e9e364eeb793
Maybe you need to recompile something?
/cc @eliasnaur @tklauser @zx2c4
On my Android O device and emulator, os.Hostname returns an error: open /proc/sys/kernel/hostname: permission denied
. That's not a crash. Perhaps some code in your program depends on os.Hostname not to fail.
If you don't see a crash from the standard library either, please change this issue title to be about making os.Hostname not fail on Android O and later. I don't know how to do that, though.
@bradfitz Just tried reinstalling go from golang.org (go1.10.1 darwin/amd64
), and compiling gomobile
and gobind
at commit https://github.com/golang/mobile/commit/f16143114e76e7064ca84d392bb01d5ed876dd52 (newest commit that would actually build my project). Same issue.
@eliasnaur You are absolutely right! App was crashing because the go library was not handling the error properly. Updated title and description to reflect that.
Perhaps the __system_property_get
function as mentioned in https://github.com/golang/go/issues/20455#issuecomment-379377568 could be used as a replacement on GOOS=android.
SGTM.
Change https://golang.org/cl/110295 mentions this issue: os: return fake hostname on Android to avoid being killed
Apologies for commenting on a closed issue, but in the commit 3c7456c should there be a break after name = string(buf[:i]) ?
+ var buf [512]byte // Enough for a DNS name.
+ for i, b := range un.Nodename[:] {
+ buf[i] = uint8(b)
+ if b == 0 {
+ name = string(buf[:i])
+ }
+ }
Change https://golang.org/cl/110436 mentions this issue: os: fix missing break bug in earlier CL 110295's use of Uname
@mdcnz, whoops. Fixed. Thanks!
Please answer these questions before submitting your issue. Thanks!
What version of Go are you using (
go version
)?go version go1.10.1 darwin/amd64
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (
go env
)?GOARCH="amd64" GOBIN="" GOCACHE="/Users/johan/Library/Caches/go-build" GOEXE="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/johan/golang" GORACE="" GOROOT="/usr/local/Cellar/go/1.10.1/libexec" GOTMPDIR="" GOTOOLDIR="/usr/local/Cellar/go/1.10.1/libexec/pkg/tool/darwin_amd64" GCCGO="gccgo" CC="clang" CXX="clang++" CGO_ENABLED="1" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/kq/3436m_v11sg0l7zqtmv2r1gw0000gn/T/go-build866177725=/tmp/go-build -gno-record-gcc-switches -fno-common"
What did you do?
Building a golang library for Android using
gomobile bind
:When the library is, calling
os.Hostname()
, the call fails with erroropen /proc/sys/kernel/hostname: permission denied
run on Android O (8.1.0). Also tested on Marshmallow (6.0) where the problem didn't occur.EDIT: Exact messsage is
Looks like access to
/proc
has been restricted? https://issuetracker.google.com/issues/37140047What did you expect to see?
Call not failing.
What did you see instead?
App stopping with error
EDIT: my library wasn't handling the error case properly, so it is not actually crashing, just that the call to
os.Hostname()
is failing.