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:
parent
7e6b38e052
commit
944df9a751
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user