]> Cypherpunks.ru repositories - gostls13.git/commit
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)
committerCherry Mui <cherryyz@google.com>
Fri, 16 Jun 2023 14:09:02 +0000 (14:09 +0000)
commit1a7709d6af76c06d465c5e969b502fc206f8e687
tree309d3c84df194c827c014436de9ed1f3e617c59a
parent3e7ec131667c31448365f47643cf9b58d08ffd26
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.

Should fix #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>
src/runtime/race/race_linux_test.go
src/runtime/race_amd64.s
src/runtime/race_arm64.s
src/runtime/race_ppc64le.s