aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Anthony Knyszek <mknyszek@google.com>2021-05-04 16:00:08 +0000
committerMichael Knyszek <mknyszek@google.com>2021-05-04 21:16:16 +0000
commitcd28ca3a4e130c88dd8f2d198050620b11d22ce4 (patch)
tree70d6285fac6d5b7eb32b01fc294554819cb6c3af /src
parentd19e5493bd764e26a0662c06c858033a24eaa415 (diff)
downloadgo-cd28ca3a4e130c88dd8f2d198050620b11d22ce4.tar.xz
runtime: abort when receiving a signal on a non-Go thread on Windows
Currently if a signal lands on a non-Go thread that's handled by the Go handler, Go will emit a message. However, unlike everywhere else in the runtime, Go will not abort the process after, and the signal handler will try to continue executing. This leads to cascading failures and possibly even memory corruption. For #45638. Change-Id: I546f4e82f339d555bed295528d819ac883b92bc6 Reviewed-on: https://go-review.googlesource.com/c/go/+/316809 Trust: Michael Knyszek <mknyszek@google.com> Run-TryBot: Michael Knyszek <mknyszek@google.com> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src')
-rw-r--r--src/runtime/sys_windows_386.s4
-rw-r--r--src/runtime/sys_windows_amd64.s2
-rw-r--r--src/runtime/sys_windows_arm.s4
-rw-r--r--src/runtime/sys_windows_arm64.s4
4 files changed, 10 insertions, 4 deletions
diff --git a/src/runtime/sys_windows_386.s b/src/runtime/sys_windows_386.s
index 64b12859ae..0b3933502a 100644
--- a/src/runtime/sys_windows_386.s
+++ b/src/runtime/sys_windows_386.s
@@ -58,7 +58,9 @@ TEXT runtime·badsignal2(SB),NOSPLIT,$24
MOVL DX, 12(SP)
MOVL $0, 16(SP) // overlapped
CALL *runtime·_WriteFile(SB)
- MOVL BP, SI
+
+ // Does not return.
+ CALL runtime·abort(SB)
RET
// faster get/set last error
diff --git a/src/runtime/sys_windows_amd64.s b/src/runtime/sys_windows_amd64.s
index e5e2083be2..e7782846b2 100644
--- a/src/runtime/sys_windows_amd64.s
+++ b/src/runtime/sys_windows_amd64.s
@@ -96,6 +96,8 @@ TEXT runtime·badsignal2(SB),NOSPLIT|NOFRAME,$48
MOVQ runtime·_WriteFile(SB), AX
CALL AX
+ // Does not return.
+ CALL runtime·abort(SB)
RET
// faster get/set last error
diff --git a/src/runtime/sys_windows_arm.s b/src/runtime/sys_windows_arm.s
index 189d2f6780..48f8c7dedf 100644
--- a/src/runtime/sys_windows_arm.s
+++ b/src/runtime/sys_windows_arm.s
@@ -97,8 +97,8 @@ TEXT runtime·badsignal2(SB),NOSPLIT|NOFRAME,$0
MOVW runtime·_WriteFile(SB), R12
BL (R12)
- MOVW R4, R13 // restore SP
- MOVM.IA.W (R13), [R4, R15] // pop {r4, pc}
+ // Does not return.
+ B runtime·abort(SB)
TEXT runtime·getlasterror(SB),NOSPLIT,$0
MRC 15, 0, R0, C13, C0, 2
diff --git a/src/runtime/sys_windows_arm64.s b/src/runtime/sys_windows_arm64.s
index 33ac091e12..7a2e11f5ae 100644
--- a/src/runtime/sys_windows_arm64.s
+++ b/src/runtime/sys_windows_arm64.s
@@ -117,7 +117,9 @@ TEXT runtime·badsignal2(SB),NOSPLIT,$16-0
MOVD runtime·_WriteFile(SB), R12
SUB $16, RSP // skip over saved frame pointer below RSP
BL (R12)
- ADD $16, RSP
+
+ // Does not return.
+ B runtime·abort(SB)
RET