1. 13 Nov, 2018 17 commits
  2. 12 Nov, 2018 23 commits
    • Emmanuel T Odeke's avatar
      net: preserve unexpired context values for LookupIPAddr · 5d392600
      Emmanuel T Odeke authored
      To avoid any cancelation of the parent context from affecting
      lookupGroup operations, Resolver.LookupIPAddr previously used
      an entirely new context created from context.Background().
      However, this meant that all the values in the parent context
      with which LookupIPAddr was invoked were dropped.
      
      This change provides a custom context implementation
      that only preserves values of the parent context by composing
      context.Background() and the parent context. It only falls back
      to the parent context to perform value lookups if the parent
      context has not yet expired.
      This context is never canceled, and has no deadlines.
      
      Fixes #28600
      
      Change-Id: If2f570caa26c65bad638b7102c35c79d5e429fea
      Reviewed-on: https://go-review.googlesource.com/c/148698
      Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      5d392600
    • Filippo Valsorda's avatar
      crypto/tls: don't modify Config.Certificates in BuildNameToCertificate · 70e3b1df
      Filippo Valsorda authored
      The Config does not own the memory pointed to by the Certificate slice.
      Instead, opportunistically use Certificate.Leaf and let the application
      set it if it desires the performance gain.
      
      This is a partial rollback of CL 107627. See the linked issue for the
      full explanation.
      
      Fixes #28744
      
      Change-Id: I33ce9e6712e3f87939d9d0932a06d24e48ba4567
      Reviewed-on: https://go-review.googlesource.com/c/149098Reviewed-by: 's avatarEmmanuel Odeke <emm.odeke@gmail.com>
      Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      70e3b1df
    • Ali Rizvi-Santiago's avatar
      runtime/cgo: added missing includes for errno.h to the windows gcc stubs. · 595bc63e
      Ali Rizvi-Santiago authored
      This adds the includes for errno.h to the windows stubs
      for runtime/cgo so that "errno" is properly declared.
      
      Due to "errno" not being properly declared, the compiler is
      forced to assume it's an external which leaves it up to the
      linker. This is an issue in some implementations as errno
      might be a macro which results in an unresolved symbol error
      during linking.
      
      runtime/cgo/gcc_libinit_windows.c: added include
      runtime/cgo/gcc_windows_386.c: added include
      runtime/cgo/gcc_windows_amd64.c: added include
      
      Change-Id: I77167d02f7409462979135efc55cf50bbc6bd363
      GitHub-Last-Rev: 90da06ee3cbec3f51c6d31185868bb70341ce9d3
      GitHub-Pull-Request: golang/go#28747
      Reviewed-on: https://go-review.googlesource.com/c/149118
      Run-TryBot: Ian Lance Taylor <iant@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      595bc63e
    • Austin Clements's avatar
      cmd/compile: fix race on initializing Sym symFunc flag · 5cf2b4c2
      Austin Clements authored
      SSA lowering can create PFUNC ONAME nodes when compiling method calls.
      Since we generally initialize the node's Sym to a func when we set its
      class to PFUNC, we did this here, too. Unfortunately, since SSA
      compilation is concurrent, this can cause a race if two function
      compilations try to initialize the same symbol.
      
      Luckily, we don't need to do this at all, since we're actually just
      wrapping an ONAME node around an existing Sym that's already marked as
      a function symbol.
      
      Fixes the linux-amd64-racecompile builder, which was broken by CL
      147158.
      
      Updates #27539.
      
      Change-Id: I8ddfce6e66a08ce53998c5bfa6f5a423c1ffc1eb
      Reviewed-on: https://go-review.googlesource.com/c/149158
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      5cf2b4c2
    • Austin Clements's avatar
      cmd/compile: create "init" symbol earlier · b52db19b
      Austin Clements authored
      We create the "init" symbol and mark it as a function before compiling
      to SSA because SSA can initialize this symbol, but it turns out we do
      it slightly too late. peekitabs, at least, can also create the "init"
      LSym. Move this initialization to just after type-checking.
      
      Fixes the linux-amd64-ssacheck and the android-arm64-wiko-fever
      builders.
      
      Updates #27539.
      
      Change-Id: If145952c79d39f75c93b24e35e67fe026dd08329
      Reviewed-on: https://go-review.googlesource.com/c/149137
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
      b52db19b
    • Austin Clements's avatar
      cmd/compile: fix TestFormats · 891f99eb
      Austin Clements authored
      This fixes the linux-amd64-longtest builder, which was broken by CL
      147160.
      
      Updates #27539.
      
      Change-Id: If6e69581ef503bba2449ec9bacaa31f34f59beb1
      Reviewed-on: https://go-review.googlesource.com/c/149157Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      891f99eb
    • Austin Clements's avatar
      cmd/compile, cmd/link: separate stable and internal ABIs · 685aca45
      Austin Clements authored
      This implements compiler and linker support for separating the
      function calling ABI into two ABIs: a stable and an internal ABI. At
      the moment, the two ABIs are identical, but we'll be able to evolve
      the internal ABI without breaking existing assembly code that depends
      on the stable ABI for calling to and from Go.
      
      The Go compiler generates internal ABI symbols for all Go functions.
      It uses the symabis information produced by the assembler to create
      ABI wrappers whenever it encounters a body-less Go function that's
      defined in assembly or a Go function that's referenced from assembly.
      
      Since the two ABIs are currently identical, for the moment this is
      implemented using "ABI alias" symbols, which are just forwarding
      references to the native ABI symbol for a function. This way there's
      no actual code involved in the ABI wrapper, which is good because
      we're not deriving any benefit from it right now. Once the ABIs
      diverge, we can eliminate ABI aliases.
      
      The linker represents these different ABIs internally as different
      versions of the same symbol. This way, the linker keeps us honest,
      since every symbol definition and reference also specifies its
      version. The linker is responsible for resolving ABI aliases.
      
      Fixes #27539.
      
      Change-Id: I197c52ec9f8fc435db8f7a4259029b20f6d65e95
      Reviewed-on: https://go-review.googlesource.com/c/147160
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      685aca45
    • Austin Clements's avatar
      cmd/link: nice error message on ABI mismatch · 1794ee68
      Austin Clements authored
      Currently, if a symbol is only defined under one ABI and referenced
      under another ABI, you simply get a "relocation target X not defined".
      This is confusing because it seems like the symbol is defined.
      
      This CL enhances the error message in this case to be "relocation
      target X not defined for <ABI> (but is defined for <ABI>)".
      
      For #27539.
      
      Change-Id: If857a1882c3fe9af5346797d5295ca1fe50ae565
      Reviewed-on: https://go-review.googlesource.com/c/147159
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      1794ee68
    • Austin Clements's avatar
      cmd/compile: mark function Syms · 16e6cd9a
      Austin Clements authored
      In order to mark the obj.LSyms produced by the compiler with the
      correct ABI, we need to know which types.Syms refer to function
      symbols. This CL adds a flag to types.Syms to mark symbols for
      functions, and sets this flag everywhere we create a PFUNC-class node,
      and in the one place where we directly create function symbols without
      always wrapping them in a PFUNC node (methodSym).
      
      We'll use this information to construct obj.LSyms with correct ABI
      information.
      
      For #27539.
      
      Change-Id: Ie3ac8bf3da013e449e78f6ca85546a055f275463
      Reviewed-on: https://go-review.googlesource.com/c/147158
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Reviewed-by: 's avatarKeith Randall <khr@golang.org>
      16e6cd9a
    • Austin Clements's avatar
      cmd/internal/obj, cmd/link: record ABIs and aliases in Go obj files · c5718b6b
      Austin Clements authored
      This repurposes the "version" field of a symbol reference in the Go
      object file format to be an ABI field. Currently, this is just 0 or 1
      depending on whether the symbol is static (the linker turns it into a
      different internal version number), so it's already only tenuously a
      symbol version. We change this to be -1 for static symbols and
      otherwise by the ABI number.
      
      This also adds a separate list of ABI alias symbols to be recorded in
      the object file. The ABI aliases must be a separate list and not just
      part of the symbol definitions because it's possible to have a symbol
      defined in one package and the alias "defined" in a different package.
      For example, this can happen if a symbol is defined in assembly in one
      package and stubbed in a different package. The stub triggers the
      generation of the ABI alias, but in a different package from the
      definition.
      
      For #27539.
      
      Change-Id: I015c9fe54690c027de6ef77e22b5585976a01587
      Reviewed-on: https://go-review.googlesource.com/c/147157
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      c5718b6b
    • Austin Clements's avatar
      cmd/go, cmd/dist: collect known cross-package uses of runtime symbols · 07544c7e
      Austin Clements authored
      This extends cmd/go's symabis support to collect known cross-package
      uses of runtime symbols from other "basically runtime" packages in
      std. This avoids having to declare a large number of ABI0 symbols in
      the runtime for a small number of known cross-package references.
      
      For cmd/dist, we use a simpler but less efficient approach and tell
      the compiler to generate ABI wrappers for everything.
      
      Change-Id: Ifaed94efdcff42e7345ab11b4d2fb880fb1a24e8
      Reviewed-on: https://go-review.googlesource.com/c/147257
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      07544c7e
    • Austin Clements's avatar
      cmd/go, cmd/dist: plumb symabis from assembler to compiler · 0f5dfbcf
      Austin Clements authored
      For #27539.
      
      Change-Id: I0e27f142224e820205fb0e65ad03be7eba93da14
      Reviewed-on: https://go-review.googlesource.com/c/146999
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
      0f5dfbcf
    • Austin Clements's avatar
      test: minor simplification to run.go · 7f1dd3ae
      Austin Clements authored
      This is a little clearer, and we're about to need the .s file list in
      one more place, so this will cut down on duplication.
      
      Change-Id: I4da8bf03a0469fb97565b0841c40d505657b574e
      Reviewed-on: https://go-review.googlesource.com/c/146998
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
      7f1dd3ae
    • Austin Clements's avatar
      cmd/compile: accept and parse symabis · 97e4010f
      Austin Clements authored
      This doesn't yet do anything with this information.
      
      For #27539.
      
      Change-Id: Ia12c905812aa1ed425eedd6ab2f55ec75d81c0ce
      Reviewed-on: https://go-review.googlesource.com/c/147099
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      97e4010f
    • Austin Clements's avatar
      cmd/asm: add mode to collect symbol ABIs · ba2e8a62
      Austin Clements authored
      This adds a -symabis flag that runs the assembler in a special mode
      that outputs symbol definition and reference ABIs rather than
      assembling the code. This uses a fast and somewhat lax parser because
      the go_asm.h definitions may not be available.
      
      For #27539.
      
      Change-Id: I248ba0ebab7cc75dcb2a90e82a82eb445da7e88e
      Reviewed-on: https://go-review.googlesource.com/c/147098
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarDavid Chase <drchase@google.com>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      ba2e8a62
    • Austin Clements's avatar
      cmd/asm: factor out line parsing from assembling · 52b22205
      Austin Clements authored
      Currently cmd/asm's Parser.line both consumes a line of assembly from
      the lexer and assembles it. This CL separates these two steps so that
      the line parser can be reused for purposes other than generating a
      Prog stream.
      
      For #27539.
      Updates #17544.
      
      Change-Id: I452c9a2112fbcc1c94bf909efc0d1fcc71014812
      Reviewed-on: https://go-review.googlesource.com/c/147097
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
      52b22205
    • Filippo Valsorda's avatar
      crypto/tls: enable TLS 1.3 and update tests · 30cc9780
      Filippo Valsorda authored
      To disable TLS 1.3, simply remove VersionTLS13 from supportedVersions,
      as tested by TestEscapeRoute, and amend documentation. To make it
      opt-in, revert the change to (*Config).supportedVersions from this CL.
      
      I did not have the heart to implement the early data skipping feature
      when I realized that it did not offer a choice between two
      abstraction-breaking options, but demanded them both (look for handshake
      type in case of HelloRetryRequest, trial decryption otherwise). It's a
      lot of complexity for an apparently small gain, but if anyone has strong
      opinions about it let me know.
      
      Note that in TLS 1.3 alerts are encrypted, so the close_notify peeking
      to return (n > 0, io.EOF) from Read doesn't work. If we are lucky, those
      servers that unexpectedly close connections after serving a single
      request will have stopped (maybe thanks to H/2) before they got updated
      to TLS 1.3.
      
      Relatedly, session tickets are now provisioned on the client first Read
      instead of at Handshake time, because they are, well, post-handshake
      messages. If this proves to be a problem we might try to peek at them.
      
      Doubled the tests that cover logic that's different in TLS 1.3.
      
      The benchmarks for TLS 1.2 compared to be0f3c28 (before TLS 1.3 and
      its refactors, after CL 142817 changed them to use real connections)
      show little movement.
      
      name                                       old time/op   new time/op   delta
      HandshakeServer/RSA-8                        795µs ± 1%    798µs ± 1%    ~     (p=0.057 n=10+18)
      HandshakeServer/ECDHE-P256-RSA-8             903µs ± 0%    909µs ± 1%  +0.68%  (p=0.000 n=8+17)
      HandshakeServer/ECDHE-P256-ECDSA-P256-8      198µs ± 0%    204µs ± 1%  +3.24%  (p=0.000 n=9+18)
      HandshakeServer/ECDHE-X25519-ECDSA-P256-8    202µs ± 3%    208µs ± 1%  +2.98%  (p=0.000 n=9+20)
      HandshakeServer/ECDHE-P521-ECDSA-P521-8     15.5ms ± 1%   15.9ms ± 2%  +2.49%  (p=0.000 n=10+20)
      Throughput/MaxPacket/1MB-8                  5.81ms ±23%   6.14ms ±44%    ~     (p=0.605 n=8+18)
      Throughput/MaxPacket/2MB-8                  8.91ms ±22%   8.74ms ±33%    ~     (p=0.498 n=9+19)
      Throughput/MaxPacket/4MB-8                  12.8ms ± 3%   14.0ms ±10%  +9.74%  (p=0.000 n=10+17)
      Throughput/MaxPacket/8MB-8                  25.1ms ± 7%   24.6ms ±16%    ~     (p=0.129 n=9+19)
      Throughput/MaxPacket/16MB-8                 46.3ms ± 4%   45.9ms ±12%    ~     (p=0.340 n=9+20)
      Throughput/MaxPacket/32MB-8                 88.5ms ± 4%   86.0ms ± 4%  -2.82%  (p=0.004 n=10+20)
      Throughput/MaxPacket/64MB-8                  173ms ± 2%    167ms ± 7%  -3.42%  (p=0.001 n=10+19)
      Throughput/DynamicPacket/1MB-8              5.88ms ± 4%   6.59ms ±64%    ~     (p=0.232 n=9+18)
      Throughput/DynamicPacket/2MB-8              9.08ms ±12%   8.73ms ±21%    ~     (p=0.408 n=10+18)
      Throughput/DynamicPacket/4MB-8              14.2ms ± 5%   14.0ms ±11%    ~     (p=0.188 n=9+19)
      Throughput/DynamicPacket/8MB-8              25.1ms ± 6%   24.0ms ± 7%  -4.39%  (p=0.000 n=10+18)
      Throughput/DynamicPacket/16MB-8             45.6ms ± 3%   43.3ms ± 1%  -5.22%  (p=0.000 n=10+8)
      Throughput/DynamicPacket/32MB-8             88.4ms ± 3%   84.8ms ± 2%  -4.06%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/64MB-8              175ms ± 3%    167ms ± 2%  -4.63%  (p=0.000 n=10+10)
      Latency/MaxPacket/200kbps-8                  694ms ± 0%    694ms ± 0%  -0.02%  (p=0.000 n=9+9)
      Latency/MaxPacket/500kbps-8                  279ms ± 0%    279ms ± 0%  -0.09%  (p=0.000 n=10+10)
      Latency/MaxPacket/1000kbps-8                 140ms ± 0%    140ms ± 0%  -0.15%  (p=0.000 n=10+9)
      Latency/MaxPacket/2000kbps-8                71.1ms ± 0%   71.0ms ± 0%  -0.09%  (p=0.001 n=8+9)
      Latency/MaxPacket/5000kbps-8                30.5ms ± 6%   30.1ms ± 6%    ~     (p=0.905 n=10+9)
      Latency/DynamicPacket/200kbps-8              134ms ± 0%    134ms ± 0%    ~     (p=0.796 n=9+9)
      Latency/DynamicPacket/500kbps-8             54.8ms ± 0%   54.7ms ± 0%  -0.18%  (p=0.000 n=8+10)
      Latency/DynamicPacket/1000kbps-8            28.5ms ± 0%   29.1ms ± 8%    ~     (p=0.173 n=8+10)
      Latency/DynamicPacket/2000kbps-8            15.3ms ± 6%   15.9ms ±10%    ~     (p=0.905 n=9+10)
      Latency/DynamicPacket/5000kbps-8            9.14ms ±21%   9.65ms ±82%    ~     (p=0.529 n=10+10)
      
      name                                       old speed     new speed     delta
      Throughput/MaxPacket/1MB-8                 175MB/s ±13%  167MB/s ±64%    ~     (p=0.646 n=7+20)
      Throughput/MaxPacket/2MB-8                 241MB/s ±25%  241MB/s ±40%    ~     (p=0.660 n=9+20)
      Throughput/MaxPacket/4MB-8                 328MB/s ± 3%  300MB/s ± 9%  -8.70%  (p=0.000 n=10+17)
      Throughput/MaxPacket/8MB-8                 335MB/s ± 7%  340MB/s ±17%    ~     (p=0.212 n=9+20)
      Throughput/MaxPacket/16MB-8                363MB/s ± 4%  367MB/s ±11%    ~     (p=0.340 n=9+20)
      Throughput/MaxPacket/32MB-8                379MB/s ± 4%  390MB/s ± 4%  +2.93%  (p=0.004 n=10+20)
      Throughput/MaxPacket/64MB-8                388MB/s ± 2%  401MB/s ± 7%  +3.25%  (p=0.004 n=10+20)
      Throughput/DynamicPacket/1MB-8             178MB/s ± 4%  157MB/s ±73%    ~     (p=0.127 n=9+20)
      Throughput/DynamicPacket/2MB-8             232MB/s ±11%  243MB/s ±18%    ~     (p=0.415 n=10+18)
      Throughput/DynamicPacket/4MB-8             296MB/s ± 5%  299MB/s ±15%    ~     (p=0.295 n=9+20)
      Throughput/DynamicPacket/8MB-8             334MB/s ± 6%  350MB/s ± 7%  +4.58%  (p=0.000 n=10+18)
      Throughput/DynamicPacket/16MB-8            368MB/s ± 3%  388MB/s ± 1%  +5.48%  (p=0.000 n=10+8)
      Throughput/DynamicPacket/32MB-8            380MB/s ± 3%  396MB/s ± 2%  +4.20%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/64MB-8            384MB/s ± 3%  403MB/s ± 2%  +4.83%  (p=0.000 n=10+10)
      
      Comparing TLS 1.2 and TLS 1.3 at tip shows a slight (~5-10%) slowdown of
      handshakes, which might be worth looking at next cycle, but the latency
      improvements are expected to overshadow that.
      
      name                                       old time/op   new time/op   delta
      HandshakeServer/ECDHE-P256-RSA-8             909µs ± 1%    963µs ± 0%   +5.87%  (p=0.000 n=17+18)
      HandshakeServer/ECDHE-P256-ECDSA-P256-8      204µs ± 1%    225µs ± 2%  +10.20%  (p=0.000 n=18+20)
      HandshakeServer/ECDHE-X25519-ECDSA-P256-8    208µs ± 1%    230µs ± 2%  +10.35%  (p=0.000 n=20+18)
      HandshakeServer/ECDHE-P521-ECDSA-P521-8     15.9ms ± 2%   15.9ms ± 1%     ~     (p=0.444 n=20+19)
      Throughput/MaxPacket/1MB-8                  6.14ms ±44%   7.07ms ±46%     ~     (p=0.057 n=18+19)
      Throughput/MaxPacket/2MB-8                  8.74ms ±33%   8.61ms ± 9%     ~     (p=0.552 n=19+17)
      Throughput/MaxPacket/4MB-8                  14.0ms ±10%   14.1ms ±12%     ~     (p=0.707 n=17+20)
      Throughput/MaxPacket/8MB-8                  24.6ms ±16%   25.6ms ±14%     ~     (p=0.107 n=19+20)
      Throughput/MaxPacket/16MB-8                 45.9ms ±12%   44.7ms ± 6%     ~     (p=0.607 n=20+19)
      Throughput/MaxPacket/32MB-8                 86.0ms ± 4%   87.9ms ± 8%     ~     (p=0.113 n=20+19)
      Throughput/MaxPacket/64MB-8                  167ms ± 7%    169ms ± 2%   +1.26%  (p=0.011 n=19+19)
      Throughput/DynamicPacket/1MB-8              6.59ms ±64%   6.79ms ±43%     ~     (p=0.480 n=18+19)
      Throughput/DynamicPacket/2MB-8              8.73ms ±21%   9.58ms ±13%   +9.71%  (p=0.006 n=18+20)
      Throughput/DynamicPacket/4MB-8              14.0ms ±11%   13.9ms ±10%     ~     (p=0.687 n=19+20)
      Throughput/DynamicPacket/8MB-8              24.0ms ± 7%   24.6ms ± 8%   +2.36%  (p=0.045 n=18+17)
      Throughput/DynamicPacket/16MB-8             43.3ms ± 1%   44.3ms ± 2%   +2.48%  (p=0.001 n=8+9)
      Throughput/DynamicPacket/32MB-8             84.8ms ± 2%   86.7ms ± 2%   +2.27%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/64MB-8              167ms ± 2%    170ms ± 3%   +1.89%  (p=0.005 n=10+10)
      Latency/MaxPacket/200kbps-8                  694ms ± 0%    699ms ± 0%   +0.65%  (p=0.000 n=9+10)
      Latency/MaxPacket/500kbps-8                  279ms ± 0%    280ms ± 0%   +0.68%  (p=0.000 n=10+10)
      Latency/MaxPacket/1000kbps-8                 140ms ± 0%    141ms ± 0%   +0.59%  (p=0.000 n=9+9)
      Latency/MaxPacket/2000kbps-8                71.0ms ± 0%   71.3ms ± 0%   +0.42%  (p=0.000 n=9+9)
      Latency/MaxPacket/5000kbps-8                30.1ms ± 6%   30.7ms ±10%   +1.93%  (p=0.019 n=9+9)
      Latency/DynamicPacket/200kbps-8              134ms ± 0%    138ms ± 0%   +3.22%  (p=0.000 n=9+10)
      Latency/DynamicPacket/500kbps-8             54.7ms ± 0%   56.3ms ± 0%   +3.03%  (p=0.000 n=10+8)
      Latency/DynamicPacket/1000kbps-8            29.1ms ± 8%   29.1ms ± 0%     ~     (p=0.173 n=10+8)
      Latency/DynamicPacket/2000kbps-8            15.9ms ±10%   16.4ms ±36%     ~     (p=0.633 n=10+8)
      Latency/DynamicPacket/5000kbps-8            9.65ms ±82%   8.32ms ± 8%     ~     (p=0.573 n=10+8)
      
      name                                       old speed     new speed     delta
      Throughput/MaxPacket/1MB-8                 167MB/s ±64%  155MB/s ±55%     ~     (p=0.224 n=20+19)
      Throughput/MaxPacket/2MB-8                 241MB/s ±40%  244MB/s ± 9%     ~     (p=0.407 n=20+17)
      Throughput/MaxPacket/4MB-8                 300MB/s ± 9%  298MB/s ±11%     ~     (p=0.707 n=17+20)
      Throughput/MaxPacket/8MB-8                 340MB/s ±17%  330MB/s ±13%     ~     (p=0.201 n=20+20)
      Throughput/MaxPacket/16MB-8                367MB/s ±11%  375MB/s ± 5%     ~     (p=0.607 n=20+19)
      Throughput/MaxPacket/32MB-8                390MB/s ± 4%  382MB/s ± 8%     ~     (p=0.113 n=20+19)
      Throughput/MaxPacket/64MB-8                401MB/s ± 7%  397MB/s ± 2%   -0.96%  (p=0.030 n=20+19)
      Throughput/DynamicPacket/1MB-8             157MB/s ±73%  156MB/s ±39%     ~     (p=0.738 n=20+20)
      Throughput/DynamicPacket/2MB-8             243MB/s ±18%  220MB/s ±14%   -9.65%  (p=0.006 n=18+20)
      Throughput/DynamicPacket/4MB-8             299MB/s ±15%  303MB/s ± 9%     ~     (p=0.512 n=20+20)
      Throughput/DynamicPacket/8MB-8             350MB/s ± 7%  342MB/s ± 8%   -2.27%  (p=0.045 n=18+17)
      Throughput/DynamicPacket/16MB-8            388MB/s ± 1%  378MB/s ± 2%   -2.41%  (p=0.001 n=8+9)
      Throughput/DynamicPacket/32MB-8            396MB/s ± 2%  387MB/s ± 2%   -2.21%  (p=0.000 n=10+10)
      Throughput/DynamicPacket/64MB-8            403MB/s ± 2%  396MB/s ± 3%   -1.84%  (p=0.005 n=10+10)
      
      Fixes #9671
      
      Change-Id: Ieb57c5140eb2c083b8be0d42b240cd2eeec0dcf6
      Reviewed-on: https://go-review.googlesource.com/c/147638
      Run-TryBot: Filippo Valsorda <filippo@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      30cc9780
    • Filippo Valsorda's avatar
      crypto/tls: set ServerName and unset TLSUnique in ConnectionState in TLS 1.3 · 039c2081
      Filippo Valsorda authored
      Fix a couple overlooked ConnectionState fields noticed by net/http
      tests, and add a test in crypto/tls. Spun off CL 147638 to keep that one
      cleanly about enabling TLS 1.3.
      
      Change-Id: I9a6c2e68d64518a44be2a5d7b0b7b8d78c98c95d
      Reviewed-on: https://go-review.googlesource.com/c/148900
      Run-TryBot: Filippo Valsorda <filippo@golang.org>
      Reviewed-by: 's avatarAndrew Bonventre <andybons@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      039c2081
    • Filippo Valsorda's avatar
      crypto/tls: implement TLS 1.3 downgrade protection · 46d4aa27
      Filippo Valsorda authored
      TLS_FALLBACK_SCSV is extremely fragile in the presence of sparse
      supported_version, but gave it the best try I could.
      
      Set the server random canaries but don't check them yet, waiting for the
      browsers to clear the way of misbehaving middleboxes.
      
      Updates #9671
      
      Change-Id: Ie55efdec671d639cf1e716acef0c5f103e91a7ce
      Reviewed-on: https://go-review.googlesource.com/c/147617Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      46d4aa27
    • Filippo Valsorda's avatar
      crypto/tls: implement TLS 1.3 client authentication · 106db71f
      Filippo Valsorda authored
      Note that the SignatureSchemes passed to GetClientCertificate in TLS 1.2
      are now filtered by the requested certificate type. This feels like an
      improvement anyway, and the full list can be surfaced as well when
      support for signature_algorithms_cert is added, which actually matches
      the semantics of the CertificateRequest signature_algorithms in TLS 1.2.
      
      Also, note a subtle behavior change in server side resumption: if a
      certificate is requested but not required, and the resumed session did
      not include one, it used not to invoke VerifyPeerCertificate. However,
      if the resumed session did include a certificate, it would. (If a
      certificate was required but not in the session, the session is rejected
      in checkForResumption.) This inconsistency could be unexpected, even
      dangerous, so now VerifyPeerCertificate is always invoked. Still not
      consistent with the client behavior, which does not ever invoke
      VerifyPeerCertificate on resumption, but it felt too surprising to
      entirely change either.
      
      Updates #9671
      
      Change-Id: Ib2b0dbc30e659208dca3ac07d6c687a407d7aaaf
      Reviewed-on: https://go-review.googlesource.com/c/147599Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      106db71f
    • Filippo Valsorda's avatar
      crypto/tls: implement TLS 1.3 PSK authentication (server side) · 6435d0cf
      Filippo Valsorda authored
      Added some assertions to testHandshake, but avoided checking the error
      of one of the Close() because the one that would lose the race would
      write the closeNotify to a connection closed on the other side which is
      broken on js/wasm (#28650). Moved that Close() after the chan sync to
      ensure it happens second.
      
      Accepting a ticket with client certificates when NoClientCert is
      configured is probably not a problem, and we could hide them to avoid
      confusing the application, but the current behavior is to skip the
      ticket, and I'd rather keep behavior changes to a minimum.
      
      Updates #9671
      
      Change-Id: I93b56e44ddfe3d48c2bef52c83285ba2f46f297a
      Reviewed-on: https://go-review.googlesource.com/c/147445Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      6435d0cf
    • Filippo Valsorda's avatar
      crypto/tls: implement TLS 1.3 PSK authentication (client side) · d669cc47
      Filippo Valsorda authored
      Also check original certificate validity when resuming TLS 1.0–1.2. Will
      refuse to resume a session if the certificate is expired or if the
      original connection had InsecureSkipVerify and the resumed one doesn't.
      
      Support only PSK+DHE to protect forward secrecy even with lack of a
      strong session ticket rotation story.
      
      Tested with NSS because s_server does not provide any way of getting the
      same session ticket key across invocations. Will self-test like TLS
      1.0–1.2 once server side is implemented.
      
      Incorporates CL 128477 by @santoshankr.
      
      Fixes #24919
      Updates #9671
      
      Change-Id: Id3eaa5b6c77544a1357668bf9ff255f3420ecc34
      Reviewed-on: https://go-review.googlesource.com/c/147420Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      d669cc47
    • Filippo Valsorda's avatar
      crypto/tls: implement TLS 1.3 middlebox compatibility mode · dc0be727
      Filippo Valsorda authored
      Looks like the introduction of CCS records in the client second flight
      gave time to s_server to send NewSessionTicket messages in between the
      client application data and close_notify. There seems to be no way of
      turning NewSessionTicket messages off, neither by not sending a
      psk_key_exchange_modes extension, nor by command line flag.
      
      Interleaving the client write like that tickled an issue akin to #18701:
      on Windows, the client reaches Close() before the last record is drained
      from the send buffer, the kernel notices and resets the connection,
      cutting short the last flow. There is no good way of synchronizing this,
      so we sleep for a RTT before calling close, like in CL 75210. Sigh.
      
      Updates #9671
      
      Change-Id: I44dc1cca17b373695b5a18c2741f218af2990bd1
      Reviewed-on: https://go-review.googlesource.com/c/147419
      Run-TryBot: Filippo Valsorda <filippo@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarAdam Langley <agl@golang.org>
      dc0be727