]> Cypherpunks.ru repositories - gostls13.git/commit
[release-branch.go1.20] runtime: use 1-byte load for address checking in racecallatomic
authorCherry Mui <cherryyz@google.com>
Thu, 15 Jun 2023 22:16:51 +0000 (18:16 -0400)
committerGopher Robot <gobot@golang.org>
Thu, 22 Jun 2023 15:14:44 +0000 (15:14 +0000)
commitbe30960e587a2892e44c07c0124eec34418ee31f
tree747a69c305a37fc8a9c9348f5b47c5a4295901ca
parentb59efe6c341c3873ff9088990ec4513336c8685f
[release-branch.go1.20] runtime: use 1-byte load for address checking in racecallatomic

In racecallatomic, we do a load before calling into TSAN, so if
the address is invalid we fault on the Go stack. We currently use
a 8-byte load instruction, regardless of the data size that the
atomic operation is performed on. So if, say, we are doing a
LoadUint32 at an address that is the last 4 bytes of a memory
mapping, we may fault unexpectedly. Do a 1-byte load instead.
(Ideally we should do a load with the right size, so we fault
correctly if we're given an unaligned address for a wide load
across a page boundary. Leave that for another CL.)

Fix AMD64, ARM64, and PPC64. The code already uses 1-byte load
on S390X.

Fixes #60845.
Updates #60825.

Change-Id: I3dee93eb08ba180c85e86a9d2e71b5b520e8dcf0
Reviewed-on: https://go-review.googlesource.com/c/go/+/503937
Run-TryBot: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: David Chase <drchase@google.com>
(cherry picked from commit 1a7709d6af76c06d465c5e969b502fc206f8e687)
Reviewed-on: https://go-review.googlesource.com/c/go/+/503976
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/race/race_linux_test.go
src/runtime/race_amd64.s
src/runtime/race_arm64.s
src/runtime/race_ppc64le.s