quic: fix race condition in fast-path reads

Receiving resent data for a stream could cause racy access to
the fast-path input buffer, when the resent data overwrote
the input buffer (with identical data).

Add a mutex guarding the fast-path input buffer.
This is not necessary to avoid this race, but makes
racing calls to Stream.Read safe (so far as the race
detector is concerned, at least).

Avoid rewriting portions of the input buffer which
might be accessed by the fast-path.

For #78737

Change-Id: I1cb086e3590e6854935b7c655d1573e16a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/766941
Reviewed-by: Nicholas Husin <nsh@golang.org>
Auto-Submit: Damien Neil <dneil@google.com>
Reviewed-by: Nicholas Husin <husin@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2 files changed
tree: 9e7b8e6225774bc61808318507f8dffa085d7948
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. http3/
  9. icmp/
  10. idna/
  11. internal/
  12. ipv4/
  13. ipv6/
  14. lif/
  15. nettest/
  16. netutil/
  17. proxy/
  18. publicsuffix/
  19. quic/
  20. route/
  21. trace/
  22. webdav/
  23. websocket/
  24. xsrftoken/
  25. .gitattributes
  26. .gitignore
  27. codereview.cfg
  28. CONTRIBUTING.md
  29. go.mod
  30. go.sum
  31. LICENSE
  32. PATENTS
  33. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.