aboutsummaryrefslogtreecommitdiff
path: root/src/syscall
AgeCommit message (Collapse)Author
2017-11-01syscall: use setattrlist for UtimesNano on Darwin for ns resolutionEvan Jones
Mac OS X 10.13 introduced APFS which stores nanosecond resolution timestamps. The implementation of os.Stat already returns full resolution timestamps, but os.Chtimes only sets timestamps with microsecond resolution. Fix this by using setattrlist on Darwin, which takes a struct timeval with nanosecond resolution. This is what Mac OS X 10.13 appears uses to implement utimensat, according to dtruss. Fixes #22528 Change-Id: I397dabef6b2b73a081382999aa4c4405ab8c6015 Reviewed-on: https://go-review.googlesource.com/74952 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-27syscall: document Time{spec,val} methodsTobias Klauser
Add godoc comments for Time{spec,val} methods Unix and Nano. Change-Id: I285bbd236af588b30140db7182b05f8b202b5b0b Reviewed-on: https://go-review.googlesource.com/73271 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-27syscall: simplify return in Futimesat and MountTobias Klauser
Directly return error instead of assigning to err and then returning. Change-Id: Ie5c466cac70cc6d52ee72ebba3e497e0da8a5797 Reviewed-on: https://go-review.googlesource.com/73531 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-26syscall: remove unnecessary use of unsafe.Pointer.Christopher Koch
Change-Id: I43b32fbca8761d33927e7d0541bba123df0e0122 Reviewed-on: https://go-review.googlesource.com/73556 Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-10-13syscall: correct type for timeout argument to Select on linux/{arm64,mips64x}Tobias Klauser
syscall.Select uses SYS_PSELECT6 on arm64 and mipx64x, however this syscall expects its 5th argument to be of type Timespec (with seconds and nanoseconds) instead of type Timeval (with seconds and microseconds) This leads to the timeout being too short by a factor of 1000. This CL fixes this by adjusting the timeout argument accordingly, similarly to how glibc does it for architectures where neither SYS_SELECT nor SYS__NEWSELECT are available. Fixes #22246 Change-Id: I33a183b0b87c2dae4a77a2d00f8615169fad48dd Reviewed-on: https://go-review.googlesource.com/70590 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-27syscall: correct TCGETS/TCSETS values on ppc64/ppc64leTobias Klauser
Correcting values is allowed per the syscall package rules, so update these constants to their correct value on ppc64/ppc64le. The values now match the corresponding constants in x/sys/unix. Update #19560 Fixes #22000 Change-Id: I1d358de345766ec96e15dfcc8911fe2f39fb0ddb Reviewed-on: https://go-review.googlesource.com/66510 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-27syscall: make Exit call runtime.exitAlex Brainman
syscall.Exit and runtime.exit do the same thing. Why duplicate code? CL 45115 fixed bug where windows runtime.exit was correct, but syscall.Exit was broken. So CL 45115 fixed windows syscall.Exit by calling runtime.exit. Austin suggested that all OSes should do the same, and this CL implements his idea. While making changes, I discovered that nacl syscall.Exit returned error func Exit(code int) (err error) and I changed it into func Exit(code int) like all other OSes. I assumed it was a mistake and it is OK to do because cmd/api does not complain about it. Also I changed plan9 runtime.exit to accept int32 just like all other OSes do. Change-Id: I12f6022ad81406566cf9befcc6edc382eebd413b Reviewed-on: https://go-review.googlesource.com/66170 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: David du Colombier <0intro@gmail.com>
2017-09-26syscall: allow abstract unix socket to use the full Path lenNicolas BRULEZ
The previous implementation forced all Unix socket to have a name strictly shorter than len(sa.raw.Path) to allow a terminating NULL byte to be added. This requirement does not apply to abstract socket names under Linux, so for this case we allow the full length. Fixes #21965 Change-Id: I1d1f58b6b6172d589428c7230cfeae984de78b4b Reviewed-on: https://go-review.googlesource.com/66190 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-09-22syscall: update syscall.Select to use newselect on ppc64xCarlos Eduardo Seo
Analog to the runtime package, syscall.Select should be using newselect instead of select. This change addresses this problem and regenerates zsyscall_linux_* for ppc64 and ppc64le. Updates #21946 Change-Id: I5dc3bf9e7f0b1172d6cce30ddf3bb1e3c95ec8e9 Reviewed-on: https://go-review.googlesource.com/65090 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Lynn Boger <laboger@linux.vnet.ibm.com>
2017-09-12runtime: improve timers scalability on multi-CPU systemsAliaksandr Valialkin
Use per-P timers, so each P may work with its own timers. This CL improves performance on multi-CPU systems in the following cases: - When serving high number of concurrent connections with read/write deadlines set (for instance, highly loaded net/http server). - When using high number of concurrent timers. These timers may be implicitly created via context.WithDeadline or context.WithTimeout. Production servers should usually set timeout on connections and external requests in order to prevent from resource leakage. See https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/ Below are relevant benchmark results for various GOMAXPROCS values on linux/amd64: context package: name old time/op new time/op delta WithTimeout/concurrency=40 4.92µs ± 0% 5.17µs ± 1% +5.07% (p=0.000 n=9+9) WithTimeout/concurrency=4000 6.03µs ± 1% 6.49µs ± 0% +7.63% (p=0.000 n=8+10) WithTimeout/concurrency=400000 8.58µs ± 7% 9.02µs ± 4% +5.02% (p=0.019 n=10+10) name old time/op new time/op delta WithTimeout/concurrency=40-2 3.70µs ± 1% 2.78µs ± 4% -24.90% (p=0.000 n=8+9) WithTimeout/concurrency=4000-2 4.49µs ± 4% 3.67µs ± 5% -18.26% (p=0.000 n=10+10) WithTimeout/concurrency=400000-2 6.16µs ±10% 5.15µs ±13% -16.30% (p=0.000 n=10+10) name old time/op new time/op delta WithTimeout/concurrency=40-4 3.58µs ± 1% 2.64µs ± 2% -26.13% (p=0.000 n=9+10) WithTimeout/concurrency=4000-4 4.17µs ± 0% 3.32µs ± 1% -20.36% (p=0.000 n=10+10) WithTimeout/concurrency=400000-4 5.57µs ± 9% 4.83µs ±10% -13.27% (p=0.001 n=10+10) time package: name old time/op new time/op delta AfterFunc 6.15ms ± 3% 6.07ms ± 2% ~ (p=0.133 n=10+9) AfterFunc-2 3.43ms ± 1% 3.56ms ± 1% +3.91% (p=0.000 n=10+9) AfterFunc-4 5.04ms ± 2% 2.36ms ± 0% -53.20% (p=0.000 n=10+9) After 6.54ms ± 2% 6.49ms ± 3% ~ (p=0.393 n=10+10) After-2 3.68ms ± 1% 3.87ms ± 0% +5.14% (p=0.000 n=9+9) After-4 6.66ms ± 1% 2.87ms ± 1% -56.89% (p=0.000 n=10+10) Stop 698µs ± 2% 689µs ± 1% -1.26% (p=0.011 n=10+10) Stop-2 729µs ± 2% 434µs ± 3% -40.49% (p=0.000 n=10+10) Stop-4 837µs ± 3% 333µs ± 2% -60.20% (p=0.000 n=10+10) SimultaneousAfterFunc 694µs ± 1% 692µs ± 7% ~ (p=0.481 n=10+10) SimultaneousAfterFunc-2 714µs ± 3% 569µs ± 2% -20.33% (p=0.000 n=10+10) SimultaneousAfterFunc-4 782µs ± 2% 386µs ± 2% -50.67% (p=0.000 n=10+10) StartStop 267µs ± 3% 274µs ± 0% +2.64% (p=0.000 n=8+9) StartStop-2 238µs ± 2% 140µs ± 3% -40.95% (p=0.000 n=10+8) StartStop-4 320µs ± 1% 125µs ± 1% -61.02% (p=0.000 n=9+9) Reset 75.0µs ± 1% 77.5µs ± 2% +3.38% (p=0.000 n=10+10) Reset-2 150µs ± 2% 40µs ± 5% -73.09% (p=0.000 n=10+9) Reset-4 226µs ± 1% 33µs ± 1% -85.42% (p=0.000 n=10+10) Sleep 857µs ± 6% 878µs ± 9% ~ (p=0.079 n=10+9) Sleep-2 617µs ± 4% 585µs ± 2% -5.21% (p=0.000 n=10+10) Sleep-4 689µs ± 3% 465µs ± 4% -32.53% (p=0.000 n=10+10) Ticker 55.9ms ± 2% 55.9ms ± 2% ~ (p=0.971 n=10+10) Ticker-2 28.7ms ± 2% 28.1ms ± 1% -2.06% (p=0.000 n=10+10) Ticker-4 14.6ms ± 0% 13.6ms ± 1% -6.80% (p=0.000 n=9+10) Fixes #15133 Change-Id: I6f4b09d2db8c5bec93146db6501b44dbfe5c0ac4 Reviewed-on: https://go-review.googlesource.com/34784 Reviewed-by: Austin Clements <austin@google.com>
2017-09-10syscall: fix TestCloneNEWUSERAndRemapRootEnableSetgroups on linuxHiroshi Ioka
Despite its name, it did the same thing as TestCloneNEWUSERAndRemapRootDisableSetgroups in old code. So fix it. Change-Id: I21265e539179c51980e16f07a553a9bf5bb7903f Reviewed-on: https://go-review.googlesource.com/35273 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-08-29syscall: drop dummy byte for oob in unixgram SendmsgNLuca Bruno
This commit relaxes SendmsgN behavior of introducing a dummy 1-byte payload when sending ancillary-only messages. The fake payload is not needed for SOCK_DGRAM type sockets, and actually breaks interoperability with other fd-passing software (journald is one known example). This introduces an additional check to avoid injecting dummy payload in such case. Full reference at https:/golang.org/issue/6476#issue-51285243 Fixes #6476 Change-Id: I19a974b4e7920e002bd0556259ab766572358520 Reviewed-on: https://go-review.googlesource.com/45872 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-08-26all: remove some double spaces from commentsDaniel Martí
Went mainly for the ones that make no sense, such as the ones mid-sentence or after commas. Change-Id: Ie245d2c19cc7428a06295635cf6a9482ade25ff0 Reviewed-on: https://go-review.googlesource.com/57293 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-08-23syscall: skip some exec tests in containerAlexander Morozov
For those tests there won't be enough permissions in containers. I decided to go this way instead of just skipping os.IsPermission errors because many of those tests were specifically written to check false positive permission errors. Fixes #21379 Change-Id: Ie25e1d6d47f85bb6b570352638440f3ac1e18e03 Reviewed-on: https://go-review.googlesource.com/58170 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-08-23syscall: move ptrace setup to right before execJess Frazelle
This will prevent any ptrace calls from getting trace output from the runtime itself setting up after fork. Fixes #21428. Change-Id: I9d835bd5a8f404394eb6237679f2111a72e5bc17 Reviewed-on: https://go-review.googlesource.com/55811 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Avelino <t@avelino.xxx>
2017-08-15syscall: really use utimensat for UtimesNano on SolarisTobias Klauser
golang.org/cl/55130 added utimensat for Solaris but didn't use it in UtimesNano (despite indicating otherwise in the commit message). Fix this by also using utimensat for UtimesNano on Solaris. Because all versions of Solaris suppported by Go support utimensat, there is no need for the fallback logic and utimensat can be called unconditionally. This issue was pointed out by Shawn Walker-Salas. Updates #16480 Change-Id: I114338113a6da3cfcb8bca950674bdc8f5a7a9e5 Reviewed-on: https://go-review.googlesource.com/55141 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-08-15syscall: fix definition of _AT_FDCWD on dragonflyTobias Klauser
CL golang.org/cl/55130 messed up the definition of _AT_FDCWD on dragonfly. This fixes the following test failure on dragonfly/amd64: --- FAIL: TestPackageMainTestImportsArchiveNotBinary (0.00s) go_test.go:192: chtimes ./testdata/src/main_test/m.go: bad file descriptor Change-Id: I4c96983769e6b02d714859dc838875c3c0f1be50 Reviewed-on: https://go-review.googlesource.com/55690 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-08-15syscall: add missing int flag argument to utimensatYuval Pavel Zholkover
Fixes #21437 Change-Id: I55fbf5114ae1bb7f4aa1a20450e8d5309756cd5b Reviewed-on: https://go-review.googlesource.com/55430 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-08-15runtime: remove unused global variable emptystringIan Lance Taylor
Last runtime use was removed in https://golang.org/cl/133700043, September 2014. Replace plan9 syscall uses with plan9-specific variable. Change-Id: Ifb910c021c1419a7c782959f90b054ed600d9e19 Reviewed-on: https://go-review.googlesource.com/55450 Reviewed-by: Martin Möhrmann <moehrmann@google.com> Run-TryBot: Martin Möhrmann <moehrmann@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-08-14syscall: add utimensat and use it for UtimesNano on BSD and SolarisTobias Klauser
All the BSDs and Solaris support the utimensat syscall, but Darwin doesn't. Account for that by adding the //sys lines not to syscall_bsd.go but the individual OS's syscall_*.go files and implement utimensat on Darwin as just returning ENOSYS, such that UtimesNano will fall back to use utimes as it currently does unconditionally. This also adds the previously missing utimensat syscall number for FreeBSD and Dragonfly. Fixes #16480 Change-Id: I367454c6168eb1f7150b988fa16cf02abff42f34 Reviewed-on: https://go-review.googlesource.com/55130 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org>
2017-07-17syscall: update check for UserNS support for centos 7Jess Frazelle
Fixes #20796 Fixes #16283 Change-Id: Ib11992fbd2bc1fbb3b14ae5a6bf0da2e4c12f641 Reviewed-on: https://go-review.googlesource.com/49311 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-07-14syscall: skip TestUnshare on Linux upon permission errorBrad Fitzpatrick
Fixes #17206 Change-Id: Id0ebc3a55ea1c5f52608decffee04c8398a8774b Reviewed-on: https://go-review.googlesource.com/48571 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-07-12syscall: use correct go binary in testBrad Fitzpatrick
Usually this test is skipped (on builders and when not root), so people are unlikely to see this error. Updates #19296 Change-Id: I3acb81260034dad8776c305f83d7cbac4b718e75 Reviewed-on: https://go-review.googlesource.com/48191 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-06-28syscall: add AmbientCaps to linux SysProcAttrMichael Stapelberg
Fixes #19713 Change-Id: Id1ca61b35bca2a4bea23dd64c7fb001a3a14fd88 Reviewed-on: https://go-review.googlesource.com/43512 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-06-28syscall: fix Exec on solarisShawn Walker-Salas
The test added for issue #18146 exposed a long-existing bug in the Solaris port; notably, that syscall.Exec uses RawSyscall -- which is not actually functional for the Solaris port (intentionally) and only exists as a placebo to satisfy build requirements. Call syscall.execve instead for Solaris. Fixes #20832 Change-Id: I327d863f4bbbbbb6e5ecf66b82152c4030825d09 Reviewed-on: https://go-review.googlesource.com/47032 Run-TryBot: Shawn Walker-Salas <shawn.walker@oracle.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-06-20runtime, syscall: workaround for bug in Linux's execveJohn R. Lenton
Linux's execve has (at the time of writing, and since v2.6.30) a bug when it ran concurrently with clone, in that it would fail to set up some datastructures if the thread count before and after some steps differed. This is described better and in more detail by Colin King in Launchpad¹ and kernel² bugs. When a program written in Go runtime.Exec's a setuid binary, this issue may cause the resulting process to not have the expected uid. This patch works around the issue by using a mutex to serialize exec and clone. 1. https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1672819 2. https://bugzilla.kernel.org/show_bug.cgi?id=195453 Fixes #19546 Change-Id: I126e87d1d9ce3be5ea4ec9c7ffe13f92e087903d Reviewed-on: https://go-review.googlesource.com/43713 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-06-20syscall: mark forkAndExecInChild1 noinlineAustin Clements
This certainly won't get inlined right now, but in the spirit of making this more robust, we have to disable inlining because inlining would defeat the purpose of separating forkAndExecInChild1 into a separate function. Updates #20732. Change-Id: I736c3f909cc42c5f5783740c2e19ba4827c7c2ec Reviewed-on: https://go-review.googlesource.com/46174 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-06-20syscall: use CLONE_VFORK safelyAustin Clements
Currently, CLONE_VFORK is used without much regard to the stack. This is dangerous, because anything the child does to the stack is visible to the parent. For example, if the compiler were to reuse named stack slots (which it currently doesn't do), it would be easy for the child running in the same stack frame as the parent to corrupt local variables that the parent then depended on. We're not sure of anything specific going wrong in this code right now, but it is at best a ticking time bomb. CLONE_VFORK can only safely be used if we ensure the child does not execute in any of the active stack frames of the parent. This commit implements this by arranging for the parent to return immediately from the frame the child will operate in, and for the child to never return to the frame the parent will operate in. Fixes #20732. Change-Id: Iad5b4ddc2b994c082bd278bfd52ef53bd38c037f Reviewed-on: https://go-review.googlesource.com/46173 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-06-14runtime, syscall: reset signal handlers to default in childIan Lance Taylor
Block all signals during a fork. In the parent process, after the fork, restore the signal mask. In the child process, reset all currently handled signals to the default handler, and then restore the signal mask. The effect of this is that the child will be operating using the same signal regime as the program it is about to exec, as exec resets all non-ignored signals to the default, and preserves the signal mask. We do this so that in the case of a signal sent to the process group, the child process will not try to run a signal handler while in the precarious state after a fork. Fixes #18600. Change-Id: I9f39aaa3884035908d687ee323c975f349d5faaa Reviewed-on: https://go-review.googlesource.com/45471 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
2017-06-08syscall: make windows Exit call runtime.exitAlex Brainman
Both runtime.exit and syscall.Exit call Windows ExitProcess. But recently (CL 34616) runtime.exit was changed to ignore Windows CreateThread errors if ExitProcess is called. This CL adjusts syscall.Exit to do the same. Fixes #18253 (maybe) Change-Id: I6496c31b01e7c7d73b69c0b2ae33ed7fbe06736b Reviewed-on: https://go-review.googlesource.com/45115 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Austin Clements <austin@google.com>
2017-06-08net: make Dial("tcp", ln.Addr().String()) work even with bad IPv6 configBrad Fitzpatrick
Some machines can be configured (or came/come configured) in such a state that IPv6 only half works: you can bind on [::]:n but not connect back to it. This implements a fallback such that it's guaranteed that this pattern works: ln, err := Listen("tcp", ":0") ... addr := ln.Addr().String() // "[::]:n" c, err := Dial("tcp", addr) ... which is also now tested. It will first try to dial "[::]:n", as before, but if that dial fails, it will also try "0.0.0.0:n". Fixes #18806 (contains more details) Fixes #20611 (I was going to fix nacl later, but it was easy enough) Change-Id: I1107eb197e902ae8185c781ad1bc4e2bc61d1f4c Reviewed-on: https://go-review.googlesource.com/45088 Reviewed-by: Paul Marks <pmarks@google.com>
2017-05-31syscall: allow processes steal a controlling terminal on LinuxJulio Montes
The current implementation of forkAndExecInChild for Linux does not allow spawned processes steal the controlling terminal from a different session group. This patch passes 1 as the argument to TIOCSCTTY in order to allow spawned processes steal controlling terminals. Fixes #20454 Change-Id: I171b8981509d648b07f89bddc1e9d45cb70e00e6 Reviewed-on: https://go-review.googlesource.com/44343 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org>
2017-05-19syscall: add Conn and RawConn interfacesMikio Hara
This change adds Conn and RawConn interfaces which can be used to manipulate raw network connection end points typically represented as socket descriptors. Fixes #19435. Change-Id: Ide2d28eeab91bfd27473ab47a87bec69950b64c9 Reviewed-on: https://go-review.googlesource.com/37913 Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
2017-05-16runtime, syscall: in Plan 9 ARM asm, replace "SWI 0" with "SWI $0"Cherry Zhang
On other systems we use "SWI $n". Change Plan 9 files to be consistent. Generated binary is unchanged. Fixes #20378. Change-Id: Ia2a722061da2450c7b30cb707ed4f172fafecf74 Reviewed-on: https://go-review.googlesource.com/43533 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-04-28syscall: fix typo in documentation for StringToUTF16PtrTommy Schaefer
Fixes #20133 Change-Id: Ic1a6eb35de1f9ddac9527335eb49bf0b52963b6a Reviewed-on: https://go-review.googlesource.com/41992 Reviewed-by: Rob Pike <r@golang.org>
2017-04-28syscall: stylistic cleanup and typo fixes in syscall_dragonfly.goMikio Hara
Now it's not very different from syscall_dragonfly.go in golang.org/x/sys/unix repository. Change-Id: I8dfd22e1ebce9dc2cc71ab9ab7f0c92d93b2b762 Reviewed-on: https://go-review.googlesource.com/41835 Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-04-25syscall: fix ordering of Unshare and chroot on LinuxRonald G. Minnich
When unshare specifies a new namespace, the syscall package changes / to make namespace changes private. If a chroot is specified, the unshare must be done first. If the chroot is done first then the unshare will not specify the correct /. A new test is included which test combining chroot and CLONE_NEWNS; it fails without the patch and works with it. Fixes #20103 Change-Id: I86022803c784bd418a30383321f3d64103d95c62 Reviewed-on: https://go-review.googlesource.com/41626 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-04-22syscall: define ESPIPE on Plan 9David du Colombier
TestSeekError has been added in CL 41311. This test doesn't build on Plan 9 because syscall.ESPIPE is not defined on Plan 9. This change defines syscall.ESPIPE on Plan 9. Fixes #20078. Change-Id: I3d9e95b00e0c4e43312eada6441d80961ae6bd67 Reviewed-on: https://go-review.googlesource.com/41471 Run-TryBot: David du Colombier <0intro@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
2017-04-22os, syscall: fix errno in Seek on windowsHiroshi Ioka
Current implementation use EPIPE as an error for Seek on pipes. According to http://pubs.opengroup.org/onlinepubs/009695399/functions/lseek.html, it should use ESPIPE instead. Fixes #20066 Change-Id: I24c3b95be946bc19a287d6b10f447b034a9a1283 Reviewed-on: https://go-review.googlesource.com/41311 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-04-18syscall: add Accept4 and SOCK_{CLOEXEC,NONBLOCK} on dragonflyMikio Hara
This change just picks a few constants from DragonfFly BSD 4.6 kernel and doesn't synchronize all the existing constants with the latest DragonFly BSD kernels. Updates #14222. Change-Id: Ie107a8bee1a09393b3b42b6f82489532f5d13290 Reviewed-on: https://go-review.googlesource.com/40894 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2017-04-17syscall: make TestFcntlFlock more robustMostyn Bramley-Moore
Avoid the use of constant absolute temp files in tests. This could produce flaky results, for example on multiuser development machines. Change-Id: Ia76157a0660fbe294bb31a46ded886cea5deec97 Reviewed-on: https://go-review.googlesource.com/40916 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-04-13syscall: fix TestGroupCleanup{UserNamespace} on AlpineJess Frazelle
This updates TestGroupCleanup and TestGroupCleanupUserNamespace to pass in the Alpine builder. Updates #19938 Change-Id: Iacbfd73782eccd57f872f9e85726c6024529c277 Reviewed-on: https://go-review.googlesource.com/40692 Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-04-07syscall: mark WSAECONNABORTED, WSAECONNRESET as temporary network errorsTamir Duberstein
Windows was missed in https://golang.org/cl/141600043. Fixes #6163 (again). Change-Id: I09076be80fb6b2148d3e5618461ebaa79f27d5b3 Reviewed-on: https://go-review.googlesource.com/39490 Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-04-05syscall: update comments for x/sys migrationLynn Boger
The comments in this package state that users should be migrating code that uses the syscall package to its corresponding package in x/sys. However, the syscall.Signal and syscall.Errno types and the syscall.SysProcAttr struct is not defined in the x/sys package and still need to be referenced from within syscall. This adds a change to the comments to clarify that the migration will need to continue to use some references to syscall for now. Fixes #19560 Change-Id: I8abb96b93bea90070ce461da16dc7bcf7b4b29c1 Reviewed-on: https://go-review.googlesource.com/39450 Reviewed-by: Rob Pike <r@golang.org>
2017-03-31syscall: skip test on TestUnshareMountNameSpace permission errorBrad Fitzpatrick
TestUnshareMountNameSpace fails on arm64 due to permission problems. Skip that test for now when permission problems are encountered, so we don't regress elsewhere in the meantime. Updates #19698 Change-Id: I9058928afa474b813652c9489f343b8957160a6c Reviewed-on: https://go-review.googlesource.com/39052 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
2017-03-23os/exec: handle Unshareflags with CLONE_NEWNSRonald G. Minnich
In some newer Linux distros, systemd forces all mount namespaces to be shared, starting at /. This disables the CLONE_NEWNS flag in unshare(2) and clone(2). While this problem is most commonly seen on systems with systemd, it can happen anywhere, due to how Linux namespaces now work. Hence, to create a private mount namespace, it is not sufficient to just set CLONE_NEWS; you have to call mount(2) to change the behavior of namespaces, i.e. mount("none", "/", NULL, MS_REC|MS_PRIVATE, NULL) This is tested and working and we can now correctly start child process with private namespaces on Linux distros that use systemd. The new test works correctly on Ubuntu 16.04.2 LTS. It fails if I comment out the new Mount, and succeeds otherwise. In each case it correctly cleans up after itself. Fixes #19661 Change-Id: I52240b59628e3772b529d9bbef7166606b0c157d Reviewed-on: https://go-review.googlesource.com/38471 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-03-22syscall: use CLONE_VFORK and CLONE_VMRichard Musiol
This greatly improves the latency of starting a child process when the Go process is using a lot of memory. Even though the kernel uses copy-on-write, preparation for that can take up to several 100ms under certain conditions. All other goroutines are suspended while starting a subprocess so this latency directly affects total throughput. With CLONE_VM the child process shares the same memory with the parent process. On its own this would lead to conflicting use of the same memory, so CLONE_VFORK is used to suspend the parent process until the child releases the memory when switching to to the new program binary via the exec syscall. When the parent process continues to run, one has to consider the changes to memory that the child process did, namely the return address of the syscall function needs to be restored from a register. A simple benchmark has shown a difference in latency of 16ms vs. 0.5ms at 10GB memory usage. However, much higher latencies of several 100ms have been observed in real world scenarios. For more information see comments on #5838. Fixes #5838 Change-Id: I6377d7bd8dcd00c85ca0c52b6683e70ce2174ba6 Reviewed-on: https://go-review.googlesource.com/37439 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-03-21syscall, os: fix FreeBSD 9 buildBrad Fitzpatrick
I broke FreeBSD 9 in https://golang.org/cl/38426 by using Pipe2. We still want to support FreeBSD 9 for one last release (Go 1.9 will be the last), and FreeBSD 9 doesn't have Pipe2. So this still uses Pipe2, but falls back to Pipe on error. Updates #18854 Updates #19072 Change-Id: I1de90fb83606c93fb84b4b86fba31e207a702835 Reviewed-on: https://go-review.googlesource.com/38430 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-03-21syscall, os: use pipe2 syscall on FreeBSD instead of pipeBrad Fitzpatrick
The pipe2 syscall exists in all officially supported FreeBSD versions: 10, 11 and future 12. The pipe syscall no longer exists in 11 and 12. To build and run Go on these versions, kernel needs COMPAT_FREEBSD10 option. Based on Gleb Smirnoff's https://golang.org/cl/38422 Fixes #18854 Change-Id: I8e201ee1b15dca10427c3093b966025d160aaf61 Reviewed-on: https://go-review.googlesource.com/38426 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2017-02-21syscall: fix linux/mipsx ret value FP offsets for Syscall9Josh Bleecher Snyder
Found by vet. Change-Id: Idf910405566816ddce6781c8e99f90b59f33d63c Reviewed-on: https://go-review.googlesource.com/37308 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>