Mark Brown broonie@kernel.org writes:
When a new thread is created by a thread with GCS enabled the GCS needs to be specified along with the regular stack. clone3() has been extended to support this case, allowing userspace to explicitly request the size for the GCS to be created, but plain clone() is not extensible and existing clone3() users will not specify a size.
For compatibility with these cases and also x86 (which did not initially implement clone3() support for shadow stacks) if no GCS is specified we will allocate one thread so when a thread is created which has GCS
~~~~~~
This "thread" seems extraneous in the sentence. Remove it?
enabled allocate one for it. We follow the extensively discussed x86 implementation and allocate min(RLIMIT_STACK, 4G). Since the GCS only
Isn't it min(RLIMIT_STACK/2, 2G)?
stores the call stack and not any variables this should be more than sufficient for most applications.
GCSs allocated via this mechanism then it will be freed when the thread exits.
I'm not sure I parsed this sentence correctly. Is it missing an "If" at the beginning?