Skip to content

Commit

Permalink
runtime: abort when receiving a signal on a non-Go thread on Windows
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mknyszek committed May 4, 2021
1 parent d19e549 commit cd28ca3
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 4 deletions.
4 changes: 3 additions & 1 deletion src/runtime/sys_windows_386.s
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/runtime/sys_windows_amd64.s
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/runtime/sys_windows_arm.s
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/runtime/sys_windows_arm64.s
Expand Up @@ -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

Expand Down

0 comments on commit cd28ca3

Please sign in to comment.