1
0
mirror of https://github.com/golang/go synced 2024-11-22 18:44:54 -07:00

runtime: use indirect call in adjustSignalStack to avoid nosplit overflow

Avoids a nosplit stack overflow on OpenBSD after CL 591997
increases the adjustSignalStack stack by 16 bytes.

Change-Id: I2c990de6c7cd8d2aca6e6b98133da120c8a4174b
Reviewed-on: https://go-review.googlesource.com/c/go/+/629696
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Damien Neil 2024-11-19 09:04:11 -08:00
parent 7e6b38e052
commit 944df9a751

View File

@ -584,15 +584,23 @@ func adjustSignalStack(sig uint32, mp *m, gsigStack *gsignalStack) bool {
}
// sp is not within gsignal stack, g0 stack, or sigaltstack. Bad.
// Call indirectly to avoid nosplit stack overflow on OpenBSD.
adjustSignalStack2Indirect(sig, sp, mp, st.ss_flags&_SS_DISABLE != 0)
return false
}
var adjustSignalStack2Indirect = adjustSignalStack2
//go:nosplit
func adjustSignalStack2(sig uint32, sp uintptr, mp *m, ssDisable bool) {
setg(nil)
needm(true)
if st.ss_flags&_SS_DISABLE != 0 {
if ssDisable {
noSignalStack(sig)
} else {
sigNotOnStack(sig, sp, mp)
}
dropm()
return false
}
// crashing is the number of m's we have waited for when implementing