[PATCH v2 2/3] nptl: Add libc allocated shadow stack for new threads
Yury Khrustalev
yury.khrustalev@arm.com
Thu Sep 4 13:24:51 GMT 2025
On Wed, Sep 03, 2025 at 04:46:47PM -0300, Adhemerval Zanella Netto wrote:
>
> On 01/09/25 07:36, Yury Khrustalev wrote:
> > On Tue, Aug 26, 2025 at 04:07:25PM -0300, Adhemerval Zanella Netto wrote:
> >>
> >> On 07/07/25 09:47, Yury Khrustalev wrote:
> >>> Includes aarch64 GCS support code, does not include x86 shstk
> >>> support (should be similar to the aarch64 case).
> >>
> >>> diff --git a/nptl/descr.h b/nptl/descr.h
> >>> index ada6867a19..733e7b0ce6 100644
> >>> --- a/nptl/descr.h
> >>> +++ b/nptl/descr.h
> >>> @@ -384,6 +384,13 @@ struct pthread
> >>> /* This is what the user specified and what we will report. */
> >>> size_t reported_guardsize;
> >>>
> >>> + /* Shadow stack base pointer. */
> >>> + void *shadow_stack_base;
> >>> + /* Shadow stack architecture-defined token. */
> >>> + void *shadow_stack_token;
> >>
> >> Isn't the shadow_stack_token derived from 'shadow_stack_base + shadow_stack_size - (2 * sizeof(void *)',
> >> since we allocate it with SHADOW_STACK_SET_TOKEN | SHADOW_STACK_SET_MARKER?
> >
> > The token is derived in a target-specific way. In general, we need all 3
> > things at once: base and size for allocation / deallocation and token
> > for target-specific operations on shadow stacks.
>
> My question is whether we need to save the 'shadow_stack_token' if we can
> derive its address from shadow_stack_base itself. It can be a arch-specific
> function if required.
We can calculate token based on base and size on aarch64. Are sure that
this will be the case for all platforms? And if not, would it be easy to
add token back?
Yury
More information about the Libc-alpha
mailing list