Skip to content

runtime: g0 stack.lo is sometimes too low #26061

Description

@aclements

In cgo mode for UNIX platforms, we compute the g0 stack bounds by querying the stack size from pthread_get_stacksize, subtracting that from the current SP in mstart, and adding a 1k buffer. However, on my Linux laptop, over 4k of the stack has already been consumed by the time we reach mstart, so the runtime sets the bottom of the g0 stack to be below the mapped memory. As a result, if we actually overflow the g0 stack, we get a segfault instead of a useful message with a traceback.

We should use pthread_get_stack instead to get both stack bounds.

Discovered when writing a test of overflowing the g0 stack for #21382, which I had assumed would pass on linux/amd64 but didn't.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsFixThe path to resolution is known, but the work has not been done.compiler/runtimeIssues related to the Go compiler and/or runtime.

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions