Commit Graph

56861 Commits

Author SHA1 Message Date
Austin Clements 76bb0caa5c runtime: delete a very stale comment
This comment claims mark termination re-scans stacks and uses the
write barrier to determine how much of the stack needs to be
rescanned. This hasn't been true since we introduced the hybrid write
barrier and deleted stack rescanning with CL 31766 in Go 1.8.

Updates #17503 I suppose.

Change-Id: I5e90f25020c9fa6f146ec6ed0642ba2b4884c2a8
Reviewed-on: https://go-review.googlesource.com/c/go/+/498435
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
2023-05-26 16:19:30 +00:00
Dmitri Shuralyov 4c1d8bf54b cmd/go/internal/modget: remove unused base.Errorf argument
Found by the vet check that runs with 'go test cmd/go/internal/modget'.

For #57001.
For #60463.

Change-Id: I4be94f7156724459a5c47bb9745cbb5651fb972c
Reviewed-on: https://go-review.googlesource.com/c/go/+/498270
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
2023-05-26 16:17:40 +00:00
Damien Neil a4cd36500b crypto/tls: avoid referencing potentially unused symbols in init
A reference to a function in a "var _ = ..." init-time
initialization keeps the symbol live. Move references to
Config.EncryptTicket and Config.DecryptTicket into tests.
These references increase the size of an unused import of
crypto/tls by about 1MiB.

Change-Id: I6d62a6dcbd73e22972a217afcda7395e909b52cc
Reviewed-on: https://go-review.googlesource.com/c/go/+/498595
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-26 15:24:38 +00:00
Ian Lance Taylor f89d575d9e doc/go1.21: mention new go test -fullpath option
For #37708

Change-Id: I7b04d6331c15771c7d74ff77afd523c435e0dafe
Reviewed-on: https://go-review.googlesource.com/c/go/+/498396
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Auto-Submit: Eli Bendersky <eliben@google.com>
Reviewed-by: Eli Bendersky <eliben@google.com>
2023-05-26 13:43:41 +00:00
Dan Peterson f90b4cd655 doc: fill out net/http.ErrSchemeMismatch note
For #44855

Change-Id: I517394b227ea948ed3e1f9ffdaab2bb2676863c8
Reviewed-on: https://go-review.googlesource.com/c/go/+/496795
TryBot-Bypass: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
2023-05-26 03:21:41 +00:00
Brad Fitzpatrick 145eec8768 database/sql: fix regression from earlier RawBytes fix
The earlier CL 497675 for #60304 introduced a behavior change
that, while not strictly a bug, caused a bunch of test failures
in a large codebase. Rather than add behavior changes in a 10 year
old package, revert to the old behavior: a context cancelation
between Rows.Next reporting false and a call to Rows.Err should
not result in Rows.Err returning the context error.

That behavior was accidentally added in CL 497675 as part of changing
how contexts and Rows iteration worked.

Updates #60304
Updates #53970

Change-Id: I22f8a6a6b0b5a94b430576cf50e015efd01ec652
Reviewed-on: https://go-review.googlesource.com/c/go/+/498398
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-26 03:06:19 +00:00
Robert Griesemer f0e356a07d doc: add release notes for new min/max built-ins
For #59488.

Change-Id: Iefabb06014767c5f633082a112a81e9ff5f09a30
Reviewed-on: https://go-review.googlesource.com/c/go/+/498397
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
TryBot-Bypass: Robert Griesemer <gri@google.com>
2023-05-25 22:02:08 +00:00
Russ Cox cfe8b43b1f cmd/go: show full path name (testdata/script/foo.txt) in script errors
Showing the full path (relative to the current directory)
instead of just foo.txt lets editors that understand file:line
jump straight to the file without having to edit it to say
testdata/script/ first.

Change-Id: I44177b687249f3c7c724b45d02f5167607369e1b
Reviewed-on: https://go-review.googlesource.com/c/go/+/498119
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
2023-05-25 21:49:42 +00:00
Ian Lance Taylor ee6b9dd47f doc/go1.21: merge x/exp/slices issue into slices package
For #57348

Change-Id: I84943711b033d63f0993133f93d9f09ce2af5965
Reviewed-on: https://go-review.googlesource.com/c/go/+/498395
Reviewed-by: Eli Bendersky <eliben@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
2023-05-25 21:41:53 +00:00
Robert Griesemer 1dd24d8216 go/types, types2: don't infer type argument for unused parameter in interfaces
Two interface types that are assignable don't have to be identical;
specifically, if they are defined types, they can be different
defined types. If those defined types specify type parameters which
are never used, do not infer a type argument based on the instantiation
of a matching defined type.

Adjusted three existing tests where we inferred type arguments incorrectly.

Fixes #60377.

Change-Id: I91fb207235424b3cbc42b5fd93eee619e7541cb7
Reviewed-on: https://go-review.googlesource.com/c/go/+/498315
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 21:37:01 +00:00
Robert Griesemer f9d114d0e8 spec: document min and max built-ins
For #59488.

Change-Id: I50f65216bf02b42c1e0619702833f4a6dbed8925
Reviewed-on: https://go-review.googlesource.com/c/go/+/498136
Reviewed-by: Rob Pike <r@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Bypass: Robert Griesemer <gri@google.com>
2023-05-25 21:09:38 +00:00
Eli Bendersky 01b5cce626 doc: add release notes for additions to the slices package
Updates #60091

Change-Id: I7438811f4e41a2977acbb5ac74c22a02c28c6597
Reviewed-on: https://go-review.googlesource.com/c/go/+/498175
Reviewed-by: Eli Bendersky <eliben@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Eli Bendersky‎ <eliben@golang.org>
Run-TryBot: Eli Bendersky‎ <eliben@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
2023-05-25 21:01:03 +00:00
Michael Matloob 11bb2922fb cmd/go: fix reporting of test cycles to have proper order
and begin and end with the same package to demonstrate the cyclical
nature of the stack. Also fix the list_test_cycle script test
which was testing for the wrong behavior.

Fixes #59970

Change-Id: I3b3ee6762ee121fec19688ff1823cdfddae94f53
Reviewed-on: https://go-review.googlesource.com/c/go/+/498115
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 19:18:23 +00:00
Russ Cox 789701e93a runtime: change heapObjectsCanMove to a func
A var is problematic because the zero value is already false,
so if it goes away, it will appear to be false.
I'm also not sure about go:linkname on vars,
so switch to func for both reasons.

Also add a test.

Change-Id: I2318a5390d98577aec025152e65543491489defb
Reviewed-on: https://go-review.googlesource.com/c/go/+/498261
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
2023-05-25 18:35:49 +00:00
Russ Cox 82d5ebce96 cmd/go: rename gover.ToolchainVersion to gover.FromToolchain
Suggested by bcmills in CL 497555 review but easier to do at the
top of the stack.

For #57001.

Change-Id: I6f2cc0f546e8d6b1e03c7335a89f07dcb45cf5b6
Reviewed-on: https://go-review.googlesource.com/c/go/+/498077
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
2023-05-25 17:52:18 +00:00
Russ Cox 4c028edffa cmd/go: avoid duplicate errors in module load
Just a missing base.ExitIfErrors.

Fixes #46160.

Change-Id: I41949b0b7b036da94ba269220951677585d3f8e9
Reviewed-on: https://go-review.googlesource.com/c/go/+/498122
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
2023-05-25 17:51:34 +00:00
Russ Cox e8c6003023 cmd/go: expand acceptable toolchains a bit
Allow both prefix-goVERSION and goVERSION-suffix for custom toolchains.
Also make sure that a tie in the toolchain and min version goes to the
toolchain line.

For #57001.

Change-Id: Ibeea5f47db7349cfdf36da188bb43e195e196f5b
Reviewed-on: https://go-review.googlesource.com/c/go/+/498076
Auto-Submit: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 17:51:31 +00:00
Russ Cox ff07c540b1 cmd/go: add go get go@version and toolchain@version
go get go@version and toolchain@version updates the
go and toolchain lines in go.mod. If toolchain ends up <= go,
it is dropped.

When the go version crosses certain version boundaries,
it may be necessary to run 'go mod tidy -go=version'.
That's left for a followup CL.

When the go or toolchain version ends up higher than the
current toolchain version, we cannot be sure we know how
to write the file out, so we fail with an error message.
In GOTOOLCHAIN auto mode, the newer toolchain should
be downloaded and reinvoked; that's left for a followup CL too.

For #57001.

Change-Id: Ibfdcc549b40555a53bdb2d019816d18f1bd16be6
Reviewed-on: https://go-review.googlesource.com/c/go/+/497081
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Russ Cox <rsc@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
2023-05-25 17:51:28 +00:00
Russ Cox aa99c4d292 cmd/go: handle queries properly in go install m@v
The original code only handled go install m@v1.0.0
but not queries like go install m@v1 or m@master.
Handle those by invoking more of the module machinery.

For #57001.

Change-Id: I7d54fc3dd65072e5906a17ff95b407b0f7feac69
Reviewed-on: https://go-review.googlesource.com/c/go/+/497879
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 17:34:01 +00:00
Russ Cox a5be6dbbaf cmd/go: refuse to download zip files for too-new modules
In general an older version of Go does not know how to construct
a module written against a newer version of Go: the details may
change over time, such as for issues like #42965 (an ignore mechanism).

For #57001.

Change-Id: Id43fcfb71497375ad2eb5dfd292bad0adca0652e
Reviewed-on: https://go-review.googlesource.com/c/go/+/497795
Run-TryBot: Russ Cox <rsc@golang.org>
Auto-Submit: Russ Cox <rsc@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 17:07:09 +00:00
Austin Clements f4086d3686 cmd/dist: drop wasitest from special list
CL 498255 made runtime/internal/wasitest compatible with all platforms
so that "go test std" works again. This means it no longer has to be
in the special dist test list.

While we're here explain the purpose of this list better and implore
people to please not expand it, since almost any addition is a sign
that "go test std cmd" no longer works.

Change-Id: I31c7fb767787fa587f65c2697aed9ed43e95fb18
Reviewed-on: https://go-review.googlesource.com/c/go/+/498256
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Austin Clements <austin@google.com>
2023-05-25 15:34:13 +00:00
Russ Cox d23669db7d all: fix buildall.bash
Disable the android and ios builds since cross-compiling fails there.
Also make runtime/internal/wasitest not build on systems that don't
have syscall.Mkfifo for it to use (including, ironically, wasm itself).

Change-Id: I28eb1f216f9952f81a107056e97ee38e350f9287
Reviewed-on: https://go-review.googlesource.com/c/go/+/498255
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 14:37:57 +00:00
Olivier Mengué fc5c590d8d errors: add godoc links
Change-Id: I766e656e6b967290d692313ea1391878fc21c92d
Reviewed-on: https://go-review.googlesource.com/c/go/+/497375
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
2023-05-25 13:20:16 +00:00
Russ Cox 055c186f53 runtime: add heapObjectsCanMove
heapObjectsCanMove is always false in the current garbage collector.
It exists for go4.org/unsafe/assume-no-moving-gc, which is an
unfortunate idea that had an even more unfortunate implementation.
Every time a new Go release happened, the package stopped building,
and the authors had to add a new file with a new //go:build line, and
then the entire ecosystem of packages with that as a dependency had to
explicitly update to the new version. Many packages depend on
assume-no-moving-gc transitively, through paths like
inet.af/netaddr -> go4.org/intern -> assume-no-moving-gc.
This was causing a significant amount of friction around each new
release, so we added this bool for the package to //go:linkname
instead. The bool is still unfortunate, but it's not as bad as
breaking the ecosystem on every new release.

If the Go garbage collector ever does move heap objects, we can set
this to true to break all the programs using assume-no-moving-gc.

Change-Id: I06c32bf6ccc4601c8eef741d7382b678aada3508
Reviewed-on: https://go-review.googlesource.com/c/go/+/498121
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
2023-05-25 13:00:06 +00:00
Roland Shoemaker 6f7824f7a4 crypto/internal/bigmod: don't panic on NewModulusFromBig(0)
Return an error instead. Makes usages of NewModulusFromBig a bit more
verbose, but better than returning nil or something and just moving the
panic down the road.

Fixes #60411

Change-Id: I10732c6ce56ccd9e4769281cea049dd4beb60a6e
Reviewed-on: https://go-review.googlesource.com/c/go/+/498035
Auto-Submit: Roland Shoemaker <roland@golang.org>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Roland Shoemaker <roland@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
2023-05-25 01:01:41 +00:00
Monis Khan 20e08fe68c crypto/tls: advertise correct ciphers in TLS 1.3 only mode
This change updates the makeClientHello logic to only advertise TLS
1.3 ciphers when tls.Config.MinVersion is set to tls.VersionTLS13
(i.e the client only supports TLS 1.3).  Previously, TLS 1.2 ciphers
would be included in the client hello message.

Fixes #57771

Change-Id: Ife4123037b0a4609578ffffb1cdf1e1d4e0a8df6
GitHub-Last-Rev: 45f4275aa9
GitHub-Pull-Request: golang/go#49293
Reviewed-on: https://go-review.googlesource.com/c/go/+/360794
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Marten Seemann <martenseemann@gmail.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 01:01:27 +00:00
Russ Cox d5a05a0510 cmd/go: clear HGRCPATH in script test
Invoking 'hg' in a nonexistant HOME can break extensions the user
may have installed; clear HGRCPATH in the script test to keep tests
working in that environment.

Change-Id: I4d21d024c6229ead38e5f24186883863511fd483
Reviewed-on: https://go-review.googlesource.com/c/go/+/497878
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Russ Cox <rsc@golang.org>
2023-05-25 00:56:18 +00:00
Brad Fitzpatrick 558301a5cb cmd/go: abstract build cache, support implementations via child process
Via setting GOCACHEPROG to a binary which speaks JSON over
stdin/stdout.

For now, it requires GOEXPERIMENT=cacheprog.

Fixes golang/go#59719

Change-Id: I824ff04d5ebdf0ba4d1b5bc2e9fbaee26d34c80f
Reviewed-on: https://go-review.googlesource.com/c/go/+/486715
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
2023-05-25 00:49:37 +00:00
Filippo Valsorda d4bd855cfb crypto/tls: don't reverify but check certificate expiration on resumption
We used to inconsistently run certificate verification on the server on
resumption, but not on the client. This made TLS 1.3 resumption pretty
much useless, as it didn't save bytes, CPU, or round-trips.

This requires serializing the verified chains into the session ticket,
so it's a tradeoff making the ticket bigger to save computation (and for
consistency).

The previous behavior also had a "stickyness" issue: if a ticket
contained invalid certificates, they would be used even if the client
had in the meantime configured valid certificates for a full handshake.

We also didn't check expiration on the client side on resumption if
InsecureSkipVerify was set. Again for consistency, we do that now.

Also, we used to run VerifyPeerCertificates on resumption even if
NoClientCerts was set.

Fixes #31641

Change-Id: Icc88269ea4adb544fa81158114aae76f3c91a15f
Reviewed-on: https://go-review.googlesource.com/c/go/+/497895
Reviewed-by: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
2023-05-25 00:14:50 +00:00
Filippo Valsorda b267db08b2 crypto/tls: add VersionName
Fixes #46308

Change-Id: I5162b26cbce61ae5df5d2e093cf8a28406d15863
Reviewed-on: https://go-review.googlesource.com/c/go/+/497377
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Marten Seemann <martenseemann@gmail.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Samuli Silvius <samuli.silvius@gmail.com>
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
2023-05-25 00:13:32 +00:00
Filippo Valsorda 4406ed6d4e crypto/tls: implement Extended Master Secret
All OpenSSL tests now test operation with EMS. To test a handshake
*without* EMS we need to pass -Options=-ExtendedMasterSecret which is
only available in OpenSSL 3.1, which breaks a number of other tests.

Updates #43922

Change-Id: Ib9ac79a1d03fab6bfba5fe9cd66689cff661cda7
Reviewed-on: https://go-review.googlesource.com/c/go/+/497376
Run-TryBot: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
2023-05-25 00:13:30 +00:00
Filippo Valsorda 869da4a2a4 crypto/tls: add QUIC 0-RTT APIs
Fixes #60107

Change-Id: I158b1c2d80d8ebb5ed7a8e6f313f69060754e220
Reviewed-on: https://go-review.googlesource.com/c/go/+/496995
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-25 00:13:28 +00:00
Chris O'Hara a17de43ef1 net: implement wasip1 FileListener and FileConn
Implements net.FileListener and net.FileConn for wasip1.

net.FileListener can be used with a pre-opened socket. If the WASM
module knows the file descriptor, a listener can be constructed with:

    l, err := net.FileListener(os.NewFile(fd, ""))

If the WASM module does not know the file descriptor, but knows that at
least one of the preopens is a socket, it can find the file descriptor
and construct a listener like so:

    func findListener() (net.Listener, error) {
        // We start looking for pre-opened sockets at fd=3 because 0, 1,
        // and 2 are reserved for stdio. Pre-opened directories also
        // start at fd=3, so we skip fds that aren't sockets. Once we
        // reach EBADF we know there are no more pre-opens.
        for preopenFd := uintptr(3); ; preopenFd++ {
            l, err := net.FileListener(os.NewFile(preopenFd, ""))

            var se syscall.Errno
            switch errors.As(err, &se); se {
            case syscall.ENOTSOCK:
                continue
            case syscall.EBADF:
                err = nil
            }
            return l, err
        }
    }

A similar strategy can be used with net.FileConn and pre-opened
connection sockets.

The wasmtime runtime supports pre-opening listener sockets:

    $ wasmtime --tcplisten 127.0.0.1:8080 module.wasm

Change-Id: Iec6ae4ffa84b3753cce4f56a2817e150445db643
Reviewed-on: https://go-review.googlesource.com/c/go/+/493358
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Bypass: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Auto-Submit: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
2023-05-25 00:12:41 +00:00
Chris O'Hara c5c2184538 runtime: implement wasip1 netpoll
Implements netpoll using WASI's poll_oneoff system call.

This enables non-blocking I/O support for wasip1.

Change-Id: Ie395fa49d651c8b8262d485e2847dd65b0a10bc6
Reviewed-on: https://go-review.googlesource.com/c/go/+/493357
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Reviewed-by: Julien Fabre <ju.pryz@gmail.com>
Auto-Submit: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
2023-05-25 00:12:40 +00:00
Sean Liao 04c628935d encoding/json: document unsupported float values
Fixes #59627

Change-Id: Icd6a9803e213596de6136ec980b0a352c450e6f7
Reviewed-on: https://go-review.googlesource.com/c/go/+/496142
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2023-05-25 00:04:56 +00:00
Filippo Valsorda 2a4f4fc525 crypto/tls: add SessionState.Extra
This can be used by applications to store additional data in a session.

Fixes #57753
For #60105

Change-Id: Ib42387ad64750fa8dbbdf51de5e9c86378bef0ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/496822
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Marten Seemann <martenseemann@gmail.com>
Reviewed-by: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2023-05-24 23:57:01 +00:00
Filippo Valsorda 6824765b4b crypto/tls: add WrapSession and UnwrapSession
There was a bug in TestResumption: the first ExpiredSessionTicket was
inserting a ticket far in the future, so the second ExpiredSessionTicket
wasn't actually supposed to fail. However, there was a bug in
checkForResumption->sendSessionTicket, too: if a session was not resumed
because it was too old, its createdAt was still persisted in the next
ticket. The two bugs used to cancel each other out.

For #60105
Fixes #19199

Change-Id: Ic9b2aab943dcbf0de62b8758a6195319dc286e2f
Reviewed-on: https://go-review.googlesource.com/c/go/+/496821
Run-TryBot: Filippo Valsorda <filippo@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
2023-05-24 23:56:55 +00:00
Filippo Valsorda 371ebe731b crypto/tls: add ClientSessionState.ResumptionState and NewResumptionState
For #60105
Fixes #25351

Change-Id: Iffd658f2663cfc47b48157824226ed6c0260a59e
Reviewed-on: https://go-review.googlesource.com/c/go/+/496820
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Marten Seemann <martenseemann@gmail.com>
2023-05-24 23:56:48 +00:00
Filippo Valsorda 6d05bc7816 crypto/tls: use SessionState on the client side
Another internal change, that allows exposing the new APIs easily in
following CLs.

For #60105

Change-Id: I9c61b9f6e9d29af633f952444f514bcbbe82fe4e
Reviewed-on: https://go-review.googlesource.com/c/go/+/496819
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
2023-05-24 23:56:41 +00:00
Filippo Valsorda 9624e67fd2 crypto/tls: add SessionState and use it on the server side
This change by itself is useless, because the application has no way to
access or provide SessionStates to crypto/tls, but they will be provided
in following CLs.

For #60105

Change-Id: I8d5de79b1eda0a778420134cf6f346246a1bb296
Reviewed-on: https://go-review.googlesource.com/c/go/+/496818
Reviewed-by: Marten Seemann <martenseemann@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
2023-05-24 23:56:32 +00:00
Filippo Valsorda 6b020be648 crypto/tls: reduce session ticket linkability
Ever since session ticket key rotation was introduced in CL 9072, we've
been including a prefix in every ticket to identify what key it's
encrypted with. It's a small privacy gain, but the cost of trial
decryptions is also small, especially since the first key is probably
the most frequently used.

Also reissue tickets on every resumption so that the next connection
can't be linked to all the previous ones. Again the privacy gain is
small but the performance cost is small and it comes with a reduction in
complexity.

For #60105

Change-Id: I852f297162d2b79a3d9bf61f6171e8ce94b2537a
Reviewed-on: https://go-review.googlesource.com/c/go/+/496817
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-24 23:56:24 +00:00
Maksim Meshkov 08458804fb compress/flate, archive/zip: reduce memory allocations
The existing implementation allocates a new 4KB buffer each time it opens flate-encoded file in a zip archive. This commit allows the flate reader to reuse the buffer on call Reset instead of allocating a new one.

It is noticeable when a zip archive contains a huge amount of files, e.g. zip archive has 50_000 files, for each file 4KB buffer is allocated, so it is 200MB memory allocations. If files are read sequentially only one buffer is needed.

Fixes #59774

Change-Id: Ib16336b101ba58e8f0f30a45dc5fd4eeebc801a1
GitHub-Last-Rev: f3f395b2ad
GitHub-Pull-Request: golang/go#59775
Reviewed-on: https://go-review.googlesource.com/c/go/+/487675
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2023-05-24 23:23:54 +00:00
Alan Donovan a965318ac0 go/types: set correct Pos for T in struct{p.T}
Previously, the field Var for T created for struct{p.T}
would use the Pos of the ast.Field, which coincides with p.
This change makes it use the Pos of T.

Errors about the field type are still reported at the
position of the ast.Field (e.g. *p.T) not the field T.

Fixes #60372

Change-Id: I06000874f2018d47159493626da3d16e6716f4c8
Reviewed-on: https://go-review.googlesource.com/c/go/+/497882
Reviewed-by: Robert Findley <rfindley@google.com>
Auto-Submit: Alan Donovan <adonovan@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
Run-TryBot: Alan Donovan <adonovan@google.com>
2023-05-24 23:16:04 +00:00
Jakub Ciolek 326df693d7 cmd/compile: Use XORL and X15 for zeroing in ggen's zerorange on AMD64
Prefer a SSE store from X15 over XORL REG REG -> MOVQ.

Use XORL REG, REG to setup 0 for REP STOS.

Remove the nacl related block.

Intel Alder Lake 12600k (Linux):

name                      old time/op    new time/op    delta
BinaryTree17-16              1.52s ± 1%     1.52s ± 1%    ~
(p=0.932 n=12+12)
Fannkuch11-16                1.40s ± 0%     1.46s ± 0%  +4.12%
(p=0.000 n=12+11)
FmtFprintfEmpty-16          13.0ns ± 1%    13.2ns ± 1%  +1.37%
(p=0.000 n=11+12)
FmtFprintfString-16         24.0ns ± 1%    23.2ns ± 1%  -3.53%
(p=0.000 n=12+11)
FmtFprintfInt-16            27.6ns ± 1%    25.5ns ± 1%  -7.53%
(p=0.000 n=12+12)
FmtFprintfIntInt-16         43.1ns ± 1%    41.4ns ± 1%  -4.00%
(p=0.000 n=12+12)
FmtFprintfPrefixedInt-16    56.8ns ± 0%    54.8ns ± 1%  -3.49%
(p=0.000 n=11+12)
FmtFprintfFloat-16          59.0ns ± 0%    59.7ns ± 1%  +1.11%
(p=0.000 n=12+12)
FmtManyArgs-16               159ns ± 1%     160ns ± 1%    ~
(p=0.070 n=12+12)
GobDecode-16                2.37ms ± 2%    2.39ms ± 1%    ~
(p=0.059 n=12+11)
GobEncode-16                1.99ms ± 2%    2.00ms ± 2%    ~
(p=0.291 n=12+12)
Gzip-16                     98.7ms ± 1%    99.2ms ± 0%  +0.51%
(p=0.024 n=12+12)
Gunzip-16                   13.4ms ± 0%    13.5ms ± 0%  +0.20%
(p=0.001 n=11+12)
HTTPClientServer-16         27.0µs ± 6%    26.5µs ± 4%    ~
(p=0.266 n=12+12)
JSONEncode-16               3.41ms ± 5%    3.44ms ± 2%    ~
(p=0.291 n=12+12)
JSONDecode-16               16.6ms ± 1%    16.6ms ± 2%    ~
(p=0.872 n=10+12)
Mandelbrot200-16            1.78ms ± 0%    1.78ms ± 0%    ~
(p=0.514 n=12+12)
GoParse-16                  1.59ms ± 2%    1.57ms ± 2%  -0.82%
(p=0.016 n=12+11)
RegexpMatchEasy0_32-16      21.5ns ± 1%    21.3ns ± 0%  -1.10%
(p=0.000 n=12+12)
RegexpMatchEasy0_1K-16      71.0ns ± 0%    69.9ns ± 0%  -1.58%
(p=0.000 n=11+11)
RegexpMatchEasy1_32-16      18.0ns ± 1%    17.3ns ± 0%  -3.38%
(p=0.000 n=12+12)
RegexpMatchEasy1_1K-16      97.8ns ± 0%    97.2ns ± 1%  -0.56%
(p=0.001 n=10+10)
RegexpMatchMedium_32-16      269ns ± 0%     270ns ± 2%    ~
(p=0.241 n=11+12)
RegexpMatchMedium_1K-16     11.4µs ± 0%    11.3µs ± 1%  -0.69%
(p=0.000 n=11+12)
RegexpMatchHard_32-16        522ns ± 0%     522ns ± 1%    ~
(p=0.811 n=12+12)
RegexpMatchHard_1K-16       15.1µs ± 2%    14.8µs ± 0%  -2.17%
(p=0.000 n=12+12)
Revcomp-16                   194ms ± 1%     195ms ± 2%    ~
(p=0.059 n=11+12)
Template-16                 22.0ms ± 2%    21.5ms ± 2%  -2.11%
(p=0.001 n=12+12)
TimeParse-16                97.3ns ± 1%    97.2ns ± 0%    ~
(p=0.217 n=11+12)
TimeFormat-16               98.2ns ± 2%    97.1ns ± 2%    ~
(p=0.101 n=12+12)
[Geo mean]                  17.7µs         17.6µs       -0.77%

name                      old speed      new speed      delta
GobDecode-16               324MB/s ± 2%   322MB/s ± 1%    ~
(p=0.058 n=12+11)
GobEncode-16               385MB/s ± 2%   383MB/s ± 2%    ~
(p=0.291 n=12+12)
Gzip-16                    197MB/s ± 1%   196MB/s ± 0%  -0.51%
(p=0.023 n=12+12)
Gunzip-16                 1.44GB/s ± 0%  1.44GB/s ± 0%  -0.20%
(p=0.001 n=11+12)
JSONEncode-16              570MB/s ± 5%   565MB/s ± 2%    ~
(p=0.291 n=12+12)
JSONDecode-16              117MB/s ± 1%   117MB/s ± 2%    ~
(p=0.885 n=10+12)
GoParse-16                36.5MB/s ± 2%  36.8MB/s ± 2%  +0.83%
(p=0.018 n=12+11)
RegexpMatchEasy0_32-16    1.49GB/s ± 1%  1.50GB/s ± 0%  +1.12%
(p=0.000 n=12+12)
RegexpMatchEasy0_1K-16    14.4GB/s ± 0%  14.6GB/s ± 0%  +1.61%
(p=0.000 n=11+11)
RegexpMatchEasy1_32-16    1.78GB/s ± 1%  1.84GB/s ± 0%  +3.50%
(p=0.000 n=12+12)
RegexpMatchEasy1_1K-16    10.5GB/s ± 0%  10.5GB/s ± 1%  +0.57%
(p=0.001 n=10+10)
RegexpMatchMedium_32-16    119MB/s ± 0%   119MB/s ± 2%    ~
(p=0.235 n=11+12)
RegexpMatchMedium_1K-16   90.1MB/s ± 0%  90.8MB/s ± 1%  +0.69%
(p=0.000 n=11+12)
RegexpMatchHard_32-16     61.3MB/s ± 0%  61.3MB/s ± 1%    ~
(p=0.765 n=12+12)
RegexpMatchHard_1K-16     67.6MB/s ± 2%  69.1MB/s ± 0%  +2.20%
(p=0.000 n=12+12)
Revcomp-16                1.31GB/s ± 1%  1.30GB/s ± 2%    ~
(p=0.059 n=11+12)
Template-16               88.3MB/s ± 2%  90.2MB/s ± 2%  +2.16%
(p=0.001 n=12+12)
[Geo mean]                 401MB/s        403MB/s       +0.49%

file                                                        before   after    Δ       %
runtime.s                                                   512467   512447   -20     -0.004%
sync.s                                                      16219    16197    -22     -0.136%
internal/singleflight.s                                     2617     2616     -1      -0.038%
internal/testlog.s                                          2157     2152     -5      -0.232%
io.s                                                        18992    18980    -12     -0.063%
text/tabwriter.s                                            8952     8913     -39     -0.436%
syscall.s                                                   85241    85220    -21     -0.025%
go/build/constraint.s                                       12763    12741    -22     -0.172%
time.s                                                      100682   100672   -10     -0.010%
context.s                                                   12316    12305    -11     -0.089%
internal/poll.s                                             45297    45114    -183    -0.404%
io/fs.s                                                     16767    16763    -4      -0.024%
crypto/hmac.s                                               2546     2537     -9      -0.353%
os.s                                                        53983    53964    -19     -0.035%
os/exec.s                                                   25723    25710    -13     -0.051%
os/user.s                                                   12166    12133    -33     -0.271%
debug/gosym.s                                               36980    36948    -32     -0.087%
database/sql.s                                              90990    90863    -127    -0.140%
archive/zip.s                                               52485    52481    -4      -0.008%
debug/dwarf.s                                               117251   117219   -32     -0.027%
encoding/json.s                                             95637    95579    -58     -0.061%
net.s                                                       278084   278056   -28     -0.010%
log.s                                                       12153    12121    -32     -0.263%
vendor/golang.org/x/net/http2/hpack.s                       22562    22552    -10     -0.044%
mime.s                                                      32872    32851    -21     -0.064%
vendor/golang.org/x/crypto/cryptobyte.s                     32035    32024    -11     -0.034%
go/token.s                                                  13689    13645    -44     -0.321%
image/gif.s                                                 22700    22668    -32     -0.141%
text/template/parse.s                                       81696    81683    -13     -0.016%
image/png.s                                                 37704    37692    -12     -0.032%
go/ast.s                                                    63753    63751    -2      -0.003%
internal/dag.s                                              13123    13122    -1      -0.008%
crypto/x509.s                                               137641   137635   -6      -0.004%
text/template.s                                             106615   106592   -23     -0.022%
os/signal.s                                                 7658     7651     -7      -0.091%
go/printer.s                                                90393    90384    -9      -0.010%
runtime/trace.s                                             2844     2819     -25     -0.879%
go/parser.s                                                 111432   111144   -288    -0.258%
html/template.s                                             91633    91619    -14     -0.015%
log/syslog.s                                                6612     6593     -19     -0.287%
net/internal/socktest.s                                     15715    15684    -31     -0.197%
runtime/pprof.s                                             70273    70177    -96     -0.137%
crypto/tls.s                                                288762   288684   -78     -0.027%
testing.s                                                   112376   112300   -76     -0.068%
internal/fuzz.s                                             89544    89535    -9      -0.010%
net/smtp.s                                                  11357    11325    -32     -0.282%
vendor/golang.org/x/net/nettest.s                           27449    27361    -88     -0.321%
testing/internal/testdeps.s                                 6384     6369     -15     -0.235%
go/types.s                                                  484464   484324   -140    -0.029%
cmd/internal/buildid.s                                      17646    17625    -21     -0.119%
go/internal/gccgoimporter.s                                 44931    44920    -11     -0.024%
go/internal/srcimporter.s                                   9989     9983     -6      -0.060%
cmd/api.s                                                   35098    35075    -23     -0.066%
net/http.s                                                  551134   550680   -454    -0.082%
cmd/internal/obj.s                                          121795   121750   -45     -0.037%
cmd/compile/internal/syntax.s                               170092   170075   -17     -0.010%
expvar.s                                                    8959     8945     -14     -0.156%
net/http/httptest.s                                         16201    16198    -3      -0.019%
net/http/httputil.s                                         44379    44339    -40     -0.090%
net/http/fcgi.s                                             18105    18099    -6      -0.033%
cmd/compile/internal/logopt.s                               9916     9905     -11     -0.111%
cmd/vendor/golang.org/x/tools/cover.s                       9722     9720     -2      -0.021%
cmd/compile/internal/base.s                                 38986    38982    -4      -0.010%
cmd/covdata.s                                               39190    39182    -8      -0.020%
cmd/go/internal/fsys.s                                      17948    17938    -10     -0.056%
cmd/dist.s                                                  169725   169616   -109    -0.064%
cmd/compile/internal/types.s                                74666    74639    -27     -0.036%
cmd/go/internal/par.s                                       4517     4516     -1      -0.022%
cmd/go/internal/lockedfile.s                                22412    22410    -2      -0.009%
cmd/compile/internal/types2.s                               476715   476596   -119    -0.025%
cmd/go/internal/trace.s                                     4888     4877     -11     -0.225%
cmd/vendor/golang.org/x/mod/module.s                        20445    20415    -30     -0.147%
cmd/vendor/golang.org/x/mod/sumdb/dirhash.s                 3596     3587     -9      -0.250%
cmd/go/internal/cache.s                                     23871    23839    -32     -0.134%
cmd/vendor/golang.org/x/mod/zip.s                           36602    36567    -35     -0.096%
cmd/vendor/golang.org/x/mod/sumdb.s                         27669    27552    -117    -0.423%
cmd/compile/internal/ir.s                                   253597   253590   -7      -0.003%
cmd/go/internal/vcs.s                                       45027    45025    -2      -0.004%
cmd/go/internal/modfetch/codehost.s                         80672    80583    -89     -0.110%
cmd/go/internal/modindex.s                                  79273    79271    -2      -0.003%
cmd/go/internal/modconv.s                                   14793    14792    -1      -0.007%
cmd/gofmt.s                                                 29600    29587    -13     -0.044%
cmd/go/internal/modfetch.s                                  111067   111017   -50     -0.045%
cmd/go/internal/vcweb.s                                     37882    37872    -10     -0.026%
cmd/compile/internal/typecheck.s                            319852   319834   -18     -0.006%
cmd/vendor/golang.org/x/term.s                              24398    24338    -60     -0.246%
cmd/vendor/github.com/google/pprof/profile.s                149107   149103   -4      -0.003%
cmd/go/internal/modload.s                                   275078   275020   -58     -0.021%
cmd/vendor/github.com/ianlancetaylor/demangle.s             264051   264013   -38     -0.014%
cmd/compile/internal/staticdata.s                           14019    14011    -8      -0.057%
cmd/go/internal/modcmd.s                                    47591    47582    -9      -0.019%
cmd/vendor/github.com/google/pprof/internal/binutils.s      37978    37926    -52     -0.137%
cmd/vendor/golang.org/x/tools/go/analysis/passes/buildtag.s 6880     6864     -16     -0.233%
cmd/go/internal/work.s                                      287700   287637   -63     -0.022%
cmd/vendor/github.com/google/pprof/internal/symbolizer.s    10171    10138    -33     -0.324%
cmd/go/internal/modget.s                                    58314    58250    -64     -0.110%
cmd/go/internal/test.s                                      52538    52534    -4      -0.008%
cmd/trace.s                                                 100245   100242   -3      -0.003%
cmd/vendor/golang.org/x/tools/go/ast/astutil.s              50731    50724    -7      -0.014%
cmd/vendor/golang.org/x/tools/internal/facts.s              13018    13011    -7      -0.054%
cmd/link/internal/ld.s                                      562438   562377   -61     -0.011%
cmd/vendor/github.com/google/pprof/internal/driver.s        148389   148338   -51     -0.034%
cmd/compile/internal/ssa.s                                  3639799  3639727  -72     -0.002%
cmd/compile/internal/ssagen.s                               359076   359028   -48     -0.013%
cmd/compile/internal/amd64.s                                31084    30582    -502    -1.615%
cmd/compile/internal/noder.s                                407972   407949   -23     -0.006%
cmd/compile/internal/gc.s                                   20101    20069    -32     -0.159%
total                                                       20771294 20766881 -4413   -0.021%

Change-Id: I2a4b01449e94906fa1ed3fb96a790977466368d9
Reviewed-on: https://go-review.googlesource.com/c/go/+/453536
Reviewed-by: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
2023-05-24 22:44:35 +00:00
Damien Neil 2cac7e89da crypto/tls: support QUIC as a transport
Add a QUICConn type for use by QUIC implementations.

A QUICConn provides unencrypted handshake bytes and connection
secrets to the QUIC layer, and receives handshake bytes.

For #44886

Change-Id: I859dda4cc6d466a1df2fb863a69d3a2a069110d5
Reviewed-on: https://go-review.googlesource.com/c/go/+/493655
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Run-TryBot: Damien Neil <dneil@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Marten Seemann <martenseemann@gmail.com>
2023-05-24 22:40:18 +00:00
Jorropo 543e601c11 net/http: second do not force the Content-Length header if nilled
This is a second round of CL 469095 which has been fixed after
the issue discovered in the revert CL 495017.

The issue was a missing res.Body.Close() in the newly added test.

Change-Id: Ifd9d8458022e59f4486397443a2862d06383e990
Reviewed-on: https://go-review.googlesource.com/c/go/+/495115
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Jorropo <jorropo.pgm@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
2023-05-24 22:39:33 +00:00
Tobias Klauser 79a8997ac5 os: add dirFs.ReadDir to implement fs.ReadDirFS for DirFS
Follow CL 416775 which added dirFs.ReadFile.

Fixes #53761

Change-Id: Iec19a815ab7c37a3206be141518cc587a588de20
Reviewed-on: https://go-review.googlesource.com/c/go/+/498015
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
2023-05-24 22:39:06 +00:00
Mateusz Poliwczak bc2095280e net: root the nodata test domain to avoid search domains
I came across similar issue in CL 455275.
Without rooting this, the search domains might affect
the query, so the test might not prove the right thing.
The search domain will cause a change from no data
to NXDOMAIN error.

Change-Id: I59f4de2635f03c69adf29b74e25e4ebd71e7413b
GitHub-Last-Rev: 3a086c74f1
GitHub-Pull-Request: golang/go#60197
Reviewed-on: https://go-review.googlesource.com/c/go/+/494896
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org>
2023-05-24 22:38:08 +00:00
Filippo Valsorda 1079e574d4 crypto/rsa,crypto/internal/bigmod: optimized short exponentiations
RSA encryption and verification performs an exponentiation by a value
usually just a few bits long. The current strategy with table
precomputation is not efficient.

Add an ExpShort bigmod method, and use it in RSA public key operations.

After this, almost all CPU time in encryption/verification is spent
preparing the constants for the modulus, because PublicKey doesn't have
a Precompute function.

This speeds up signing a bit too, because it performs a verification to
protect against faults.

name                    old time/op  new time/op  delta
DecryptPKCS1v15/2048-4  1.13ms ± 0%  1.13ms ± 0%   -0.43%  (p=0.000 n=8+9)
DecryptPKCS1v15/3072-4  3.20ms ± 0%  3.15ms ± 0%   -1.59%  (p=0.000 n=10+8)
DecryptPKCS1v15/4096-4  6.45ms ± 0%  6.42ms ± 0%   -0.49%  (p=0.000 n=10+10)
EncryptPKCS1v15/2048-4   132µs ± 0%   108µs ± 0%  -17.99%  (p=0.000 n=10+10)
DecryptOAEP/2048-4      1.13ms ± 0%  1.14ms ± 0%   +0.91%  (p=0.000 n=10+10)
EncryptOAEP/2048-4       132µs ± 0%   108µs ± 0%  -18.09%  (p=0.000 n=10+10)
SignPKCS1v15/2048-4     1.18ms ± 0%  1.14ms ± 1%   -3.30%  (p=0.000 n=10+10)
VerifyPKCS1v15/2048-4    131µs ± 0%   107µs ± 0%  -18.30%  (p=0.000 n=9+10)
SignPSS/2048-4          1.18ms ± 0%  1.15ms ± 1%   -1.87%  (p=0.000 n=10+10)
VerifyPSS/2048-4         132µs ± 0%   108µs ± 0%  -18.30%  (p=0.000 n=10+9)

Updates #57752

Change-Id: Ic89273a58002b32b1c5c3185a35262694ceef409
Reviewed-on: https://go-review.googlesource.com/c/go/+/492935
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
2023-05-24 22:38:06 +00:00
Filippo Valsorda 7d96475daa crypto/internal/bigmod: switch to saturated limbs
Turns out that unsaturated limbs being more performant for Montgomery
multiplication was true in portable C89, but is now a misconception.
With add-with-carry instructions, it's possible to run the carry chain
across the limbs, instead of needing the limb-by-limb product to fit in
two words.

Switch to saturated limbs, and import the same Montgomery loop as
math/big, along with its assembly for some architectures. Since here we
know the sizes we care about, we can drop most of the assembly
scaffolding. For amd64, ported to avo, too.

We recover all the Go 1.20 performance loss on private key operations on
both Intel Xeon and AMD EPYC, with even a 10% improvement over Go 1.19
(which used variable-time math/big) for some operations.

goos: linux
goarch: amd64
pkg: crypto/rsa
cpu: Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
                       │ go1.19.txt  │       go1.20.txt         │         new.txt          │
                       │   sec/op    │    sec/op      vs base   │    sec/op      vs base   │
DecryptPKCS1v15/2048-4   1.175m ± 0%     1.515m ± 0%    +28.95%     1.132m ± 0%     -3.59%
DecryptPKCS1v15/3072-4   3.428m ± 1%     4.516m ± 0%    +31.75%     3.198m ± 0%     -6.69%
DecryptPKCS1v15/4096-4   7.405m ± 0%    10.092m ± 0%    +36.29%     6.446m ± 0%    -12.95%
EncryptPKCS1v15/2048-4   7.426µ ± 0%   170.829µ ± 0%  +2200.57%   131.874µ ± 0%  +1675.97%
DecryptOAEP/2048-4       1.175m ± 0%     1.524m ± 0%    +29.68%     1.137m ± 0%     -3.26%
EncryptOAEP/2048-4       9.609µ ± 0%   173.008µ ± 0%  +1700.48%   132.344µ ± 0%  +1277.29%
SignPKCS1v15/2048-4      1.181m ± 0%     1.563m ± 0%    +32.34%     1.177m ± 0%     -0.37% 
VerifyPKCS1v15/2048-4    6.452µ ± 0%   170.092µ ± 0%  +2536.06%   131.225µ ± 0%  +1933.70%
SignPSS/2048-4           1.184m ± 0%     1.574m ± 0%    +32.88%     1.175m ± 0%     -0.84%
VerifyPSS/2048-4         9.151µ ± 1%   172.909µ ± 0%  +1789.50%   132.391µ ± 0%  +1346.74%

                       │  go1.19.txt   │      go1.20.txt       │       new.txt         │
                       │     B/op      │     B/op      vs base │     B/op      vs base │
DecryptPKCS1v15/2048-4    24266.5 ± 0%     640.0 ± 0%  -97.36%     640.0 ± 0%  -97.36%
DecryptPKCS1v15/3072-4   45.465Ki ± 0%   3.375Ki ± 0%  -92.58%   4.688Ki ± 0%  -89.69%
DecryptPKCS1v15/4096-4   61.080Ki ± 0%   4.625Ki ± 0%  -92.43%   6.250Ki ± 0%  -89.77%
EncryptPKCS1v15/2048-4    3.138Ki ± 0%   1.146Ki ± 0%  -63.49%   1.082Ki ± 0%  -65.52%
DecryptOAEP/2048-4        24500.0 ± 0%     872.0 ± 0%  -96.44%     872.0 ± 0%  -96.44%
EncryptOAEP/2048-4        3.610Ki ± 0%   1.371Ki ± 0%  -62.02%   1.308Ki ± 0%  -63.78%
SignPKCS1v15/2048-4       26933.0 ± 0%     896.0 ± 0%  -96.67%     896.0 ± 0%  -96.67%
VerifyPKCS1v15/2048-4      3209.0 ± 0%     912.0 ± 0%  -71.58%     848.0 ± 0%  -73.57%
SignPSS/2048-4           26.940Ki ± 0%   1.266Ki ± 0%  -95.30%   1.266Ki ± 0%  -95.30%
VerifyPSS/2048-4          3.337Ki ± 0%   1.094Ki ± 0%  -67.22%   1.031Ki ± 0%  -69.10%

                       │  go1.19.txt  │     go1.20.txt      │      new.txt          │
                       │  allocs/op   │ allocs/op   vs base │ allocs/op   vs base   │
DecryptPKCS1v15/2048-4    97.000 ± 0%   4.000 ± 0%  -95.88%     4.000 ± 0%  -95.88%
DecryptPKCS1v15/3072-4    107.00 ± 0%   10.00 ± 0%  -90.65%     12.00 ± 0%  -88.79%
DecryptPKCS1v15/4096-4    113.00 ± 0%   10.00 ± 0%  -91.15%     12.00 ± 0%  -89.38%
EncryptPKCS1v15/2048-4     7.000 ± 0%   7.000 ± 0%        ~     7.000 ± 0%        ~  
DecryptOAEP/2048-4        103.00 ± 0%   10.00 ± 0%  -90.29%     10.00 ± 0%  -90.29%
EncryptOAEP/2048-4         14.00 ± 0%   13.00 ± 0%   -7.14%     13.00 ± 0%   -7.14%
SignPKCS1v15/2048-4      102.000 ± 0%   5.000 ± 0%  -95.10%     5.000 ± 0%  -95.10%
VerifyPKCS1v15/2048-4      7.000 ± 0%   6.000 ± 0%  -14.29%     6.000 ± 0%  -14.29%
SignPSS/2048-4            108.00 ± 0%   10.00 ± 0%  -90.74%     10.00 ± 0%  -90.74%
VerifyPSS/2048-4           12.00 ± 0%   11.00 ± 0%   -8.33%     11.00 ± 0%   -8.33%

goos: linux
goarch: amd64
pkg: crypto/rsa
cpu: AMD EPYC 7R13 Processor
                       │ go1.19a.txt │       go1.20a.txt        │        newa.txt          │
                       │   sec/op    │    sec/op      vs base   │    sec/op      vs base   │
DecryptPKCS1v15/2048-4   970.0µ ± 0%    1667.6µ ± 0%    +71.92%     951.6µ ± 0%     -1.90%
DecryptPKCS1v15/3072-4   2.949m ± 0%     5.124m ± 0%    +73.75%     2.675m ± 0%     -9.29%
DecryptPKCS1v15/4096-4   6.350m ± 0%    11.660m ± 0%    +83.62%     5.746m ± 0%     -9.51%
EncryptPKCS1v15/2048-4   6.605µ ± 1%   183.807µ ± 0%  +2683.05%   123.720µ ± 0%  +1773.27%
DecryptOAEP/2048-4       973.8µ ± 0%    1670.8µ ± 0%    +71.57%     951.8µ ± 0%     -2.27% 
EncryptOAEP/2048-4       8.444µ ± 1%   185.889µ ± 0%  +2101.56%   124.142µ ± 0%  +1370.27%
SignPKCS1v15/2048-4      976.8µ ± 0%    1725.5µ ± 0%    +76.65%     979.6µ ± 0%     +0.28%
VerifyPKCS1v15/2048-4    5.713µ ± 0%   182.983µ ± 0%  +3103.19%   122.737µ ± 0%  +2048.56%
SignPSS/2048-4           980.3µ ± 0%    1729.5µ ± 0%    +76.42%     985.7µ ± 3%     +0.55%
VerifyPSS/2048-4         8.168µ ± 1%   185.312µ ± 0%  +2168.76%   123.772µ ± 0%  +1415.33%

Fixes #59463
Fixes #59442
Updates #57752

Change-Id: I311a9c1f4f5288e47e53ca14f615a443f3132734
Reviewed-on: https://go-review.googlesource.com/c/go/+/471259
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Filippo Valsorda <filippo@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Roland Shoemaker <roland@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
2023-05-24 22:37:58 +00:00