1
0
mirror of https://github.com/golang/go synced 2024-11-19 05:44:40 -07:00

runtime: check for nil g in msancall() on arm64

The current msanwrite() segfaults during libpreinit
when built with -msan on arm64. The cause is msancall()
in runtime/msan_arm64.s called by msanwrite() assumes
that it is always called with a valid g, leading to a
segfult.

This CL adds a check for nil g in msancall().

Fixes #34338

Change-Id: If4ad7e37556cd1d99346c1a7b4852651d1e4e4aa
Reviewed-on: https://go-review.googlesource.com/c/go/+/196157
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
fanzha02 2019-09-17 07:49:47 +00:00 committed by Ian Lance Taylor
parent bcf6f9fd4c
commit 827584e2f3

View File

@ -47,9 +47,10 @@ TEXT runtime·msanfree(SB), NOSPLIT, $0-16
// Switches SP to g0 stack and calls (FARG). Arguments already set. // Switches SP to g0 stack and calls (FARG). Arguments already set.
TEXT msancall<>(SB), NOSPLIT, $0-0 TEXT msancall<>(SB), NOSPLIT, $0-0
MOVD RSP, R19 // callee-saved
CBZ g, g0stack // no g, still on a system stack
MOVD g_m(g), R10 MOVD g_m(g), R10
MOVD m_g0(R10), R11 MOVD m_g0(R10), R11
MOVD RSP, R19 // callee-saved
CMP R11, g CMP R11, g
BEQ g0stack BEQ g0stack