sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget"/translations/zh_CN/arch/arm64/gcsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/zh_TW/arch/arm64/gcsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/it_IT/arch/arm64/gcsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/ja_JP/arch/arm64/gcsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/ko_KR/arch/arm64/gcsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget"/translations/sp_SP/arch/arm64/gcsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(h/Guarded Control Stack support for AArch64 Linuxh]h/Guarded Control Stack support for AArch64 Linux}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhubh)}(hhh](h)}(hGCS is enabled and disabled for a thread via the PR_SET_SHADOW_STACK_STATUS prctl(), this takes a single flags argument specifying which GCS features should be used. h]h)}(hGCS is enabled and disabled for a thread via the PR_SET_SHADOW_STACK_STATUS prctl(), this takes a single flags argument specifying which GCS features should be used.h]hGCS is enabled and disabled for a thread via the PR_SET_SHADOW_STACK_STATUS prctl(), this takes a single flags argument specifying which GCS features should be used.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK@hj1ubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hWhen set PR_SHADOW_STACK_ENABLE flag allocates a Guarded Control Stack and enables GCS for the thread, enabling the functionality controlled by GCSCRE0_EL1.{nTR, RVCHKEN, PCRSEL}. h]h)}(hWhen set PR_SHADOW_STACK_ENABLE flag allocates a Guarded Control Stack and enables GCS for the thread, enabling the functionality controlled by GCSCRE0_EL1.{nTR, RVCHKEN, PCRSEL}.h]hWhen set PR_SHADOW_STACK_ENABLE flag allocates a Guarded Control Stack and enables GCS for the thread, enabling the functionality controlled by GCSCRE0_EL1.{nTR, RVCHKEN, PCRSEL}.}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjIubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hWhen set the PR_SHADOW_STACK_PUSH flag enables the functionality controlled by GCSCRE0_EL1.PUSHMEn, allowing explicit GCS pushes. h]h)}(hWhen set the PR_SHADOW_STACK_PUSH flag enables the functionality controlled by GCSCRE0_EL1.PUSHMEn, allowing explicit GCS pushes.h]hWhen set the PR_SHADOW_STACK_PUSH flag enables the functionality controlled by GCSCRE0_EL1.PUSHMEn, allowing explicit GCS pushes.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjaubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hWhen set the PR_SHADOW_STACK_WRITE flag enables the functionality controlled by GCSCRE0_EL1.STREn, allowing explicit stores to the Guarded Control Stack. h]h)}(hWhen set the PR_SHADOW_STACK_WRITE flag enables the functionality controlled by GCSCRE0_EL1.STREn, allowing explicit stores to the Guarded Control Stack.h]hWhen set the PR_SHADOW_STACK_WRITE flag enables the functionality controlled by GCSCRE0_EL1.STREn, allowing explicit stores to the Guarded Control Stack.}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjyubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hKAny unknown flags will cause PR_SET_SHADOW_STACK_STATUS to return -EINVAL. h]h)}(hJAny unknown flags will cause PR_SET_SHADOW_STACK_STATUS to return -EINVAL.h]hJAny unknown flags will cause PR_SET_SHADOW_STACK_STATUS to return -EINVAL.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hPR_LOCK_SHADOW_STACK_STATUS is passed a bitmask of features with the same values as used for PR_SET_SHADOW_STACK_STATUS. Any future changes to the status of the specified GCS mode bits will be rejected. h]h)}(hPR_LOCK_SHADOW_STACK_STATUS is passed a bitmask of features with the same values as used for PR_SET_SHADOW_STACK_STATUS. Any future changes to the status of the specified GCS mode bits will be rejected.h]hPR_LOCK_SHADOW_STACK_STATUS is passed a bitmask of features with the same values as used for PR_SET_SHADOW_STACK_STATUS. Any future changes to the status of the specified GCS mode bits will be rejected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hzPR_LOCK_SHADOW_STACK_STATUS allows any bit to be locked, this allows userspace to prevent changes to any future features. h]h)}(hyPR_LOCK_SHADOW_STACK_STATUS allows any bit to be locked, this allows userspace to prevent changes to any future features.h]hyPR_LOCK_SHADOW_STACK_STATUS allows any bit to be locked, this allows userspace to prevent changes to any future features.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hMThere is no support for a process to remove a lock that has been set for it. h]h)}(hLThere is no support for a process to remove a lock that has been set for it.h]hLThere is no support for a process to remove a lock that has been set for it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hPR_SET_SHADOW_STACK_STATUS and PR_LOCK_SHADOW_STACK_STATUS affect only the thread that called them, any other running threads will be unaffected. h]h)}(hPR_SET_SHADOW_STACK_STATUS and PR_LOCK_SHADOW_STACK_STATUS affect only the thread that called them, any other running threads will be unaffected.h]hPR_SET_SHADOW_STACK_STATUS and PR_LOCK_SHADOW_STACK_STATUS affect only the thread that called them, any other running threads will be unaffected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hKNew threads inherit the GCS configuration of the thread that created them. h]h)}(hJNew threads inherit the GCS configuration of the thread that created them.h]hJNew threads inherit the GCS configuration of the thread that created them.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hj ubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hGCS is disabled on exec(). h]h)}(hGCS is disabled on exec().h]hGCS is disabled on exec().}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj!ubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hThe current GCS configuration for a thread may be read with the PR_GET_SHADOW_STACK_STATUS prctl(), this returns the same flags that are passed to PR_SET_SHADOW_STACK_STATUS. h]h)}(hThe current GCS configuration for a thread may be read with the PR_GET_SHADOW_STACK_STATUS prctl(), this returns the same flags that are passed to PR_SET_SHADOW_STACK_STATUS.h]hThe current GCS configuration for a thread may be read with the PR_GET_SHADOW_STACK_STATUS prctl(), this returns the same flags that are passed to PR_SET_SHADOW_STACK_STATUS.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahj9ubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hIf GCS is disabled for a thread after having previously been enabled then the stack will remain allocated for the lifetime of the thread. At present any attempt to reenable GCS for the thread will be rejected, this may be revisited in future. h]h)}(hIf GCS is disabled for a thread after having previously been enabled then the stack will remain allocated for the lifetime of the thread. At present any attempt to reenable GCS for the thread will be rejected, this may be revisited in future.h]hIf GCS is disabled for a thread after having previously been enabled then the stack will remain allocated for the lifetime of the thread. At present any attempt to reenable GCS for the thread will be rejected, this may be revisited in future.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjQubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubh)}(hX'It should be noted that since enabling GCS will result in GCS becoming active immediately it is not normally possible to return from the function that invoked the prctl() that enabled GCS. It is expected that the normal usage will be that GCS is enabled very early in execution of a program. h]h)}(hX$It should be noted that since enabling GCS will result in GCS becoming active immediately it is not normally possible to return from the function that invoked the prctl() that enabled GCS. It is expected that the normal usage will be that GCS is enabled very early in execution of a program.h]hX$It should be noted that since enabling GCS will result in GCS becoming active immediately it is not normally possible to return from the function that invoked the prctl() that enabled GCS. It is expected that the normal usage will be that GCS is enabled very early in execution of a program.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhjiubah}(h]h ]h"]h$]h&]uh1hhj.hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhK@hjhhubeh}(h]-enabling-and-disabling-guarded-control-stacksah ]h"]02. enabling and disabling guarded control stacksah$]h&]uh1hhhhhhhhK>ubh)}(hhh](h)}(h(3. Allocation of Guarded Control Stacksh]h(3. Allocation of Guarded Control Stacks}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKrubh)}(hhh](h)}(hWhen GCS is enabled for a thread a new Guarded Control Stack will be allocated for it of half the standard stack size or 2 gigabytes, whichever is smaller. h]h)}(hWhen GCS is enabled for a thread a new Guarded Control Stack will be allocated for it of half the standard stack size or 2 gigabytes, whichever is smaller.h]hWhen GCS is enabled for a thread a new Guarded Control Stack will be allocated for it of half the standard stack size or 2 gigabytes, whichever is smaller.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hWhen a new thread is created by a thread which has GCS enabled then a new Guarded Control Stack will be allocated for the new thread with half the size of the standard stack. h]h)}(hWhen a new thread is created by a thread which has GCS enabled then a new Guarded Control Stack will be allocated for the new thread with half the size of the standard stack.h]hWhen a new thread is created by a thread which has GCS enabled then a new Guarded Control Stack will be allocated for the new thread with half the size of the standard stack.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hWhen a stack is allocated by enabling GCS or during thread creation then the top 8 bytes of the stack will be initialised to 0 and GCSPR_EL0 will be set to point to the address of this 0 value, this can be used to detect the top of the stack. h]h)}(hWhen a stack is allocated by enabling GCS or during thread creation then the top 8 bytes of the stack will be initialised to 0 and GCSPR_EL0 will be set to point to the address of this 0 value, this can be used to detect the top of the stack.h]hWhen a stack is allocated by enabling GCS or during thread creation then the top 8 bytes of the stack will be initialised to 0 and GCSPR_EL0 will be set to point to the address of this 0 value, this can be used to detect the top of the stack.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK|hjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(h]Additional Guarded Control Stacks can be allocated using the map_shadow_stack() system call. h]h)}(h\Additional Guarded Control Stacks can be allocated using the map_shadow_stack() system call.h]h\Additional Guarded Control Stacks can be allocated using the map_shadow_stack() system call.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hXStacks allocated using map_shadow_stack() can optionally have an end of stack marker and cap placed at the top of the stack. If the flag SHADOW_STACK_SET_TOKEN is specified a cap will be placed on the stack, if SHADOW_STACK_SET_MARKER is not specified the cap will be the top 8 bytes of the stack and if it is specified then the cap will be the next 8 bytes. While specifying just SHADOW_STACK_SET_MARKER by itself is valid since the marker is all bits 0 it has no observable effect. h]h)}(hXStacks allocated using map_shadow_stack() can optionally have an end of stack marker and cap placed at the top of the stack. If the flag SHADOW_STACK_SET_TOKEN is specified a cap will be placed on the stack, if SHADOW_STACK_SET_MARKER is not specified the cap will be the top 8 bytes of the stack and if it is specified then the cap will be the next 8 bytes. While specifying just SHADOW_STACK_SET_MARKER by itself is valid since the marker is all bits 0 it has no observable effect.h]hXStacks allocated using map_shadow_stack() can optionally have an end of stack marker and cap placed at the top of the stack. If the flag SHADOW_STACK_SET_TOKEN is specified a cap will be placed on the stack, if SHADOW_STACK_SET_MARKER is not specified the cap will be the top 8 bytes of the stack and if it is specified then the cap will be the next 8 bytes. While specifying just SHADOW_STACK_SET_MARKER by itself is valid since the marker is all bits 0 it has no observable effect.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hStacks allocated using map_shadow_stack() must have a size which is a multiple of 8 bytes larger than 8 bytes and must be 8 bytes aligned. h]h)}(hStacks allocated using map_shadow_stack() must have a size which is a multiple of 8 bytes larger than 8 bytes and must be 8 bytes aligned.h]hStacks allocated using map_shadow_stack() must have a size which is a multiple of 8 bytes larger than 8 bytes and must be 8 bytes aligned.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hrAn address can be specified to map_shadow_stack(), if one is provided then it must be aligned to a page boundary. h]h)}(hqAn address can be specified to map_shadow_stack(), if one is provided then it must be aligned to a page boundary.h]hqAn address can be specified to map_shadow_stack(), if one is provided then it must be aligned to a page boundary.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj3ubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hWhen a thread is freed the Guarded Control Stack initially allocated for that thread will be freed. Note carefully that if the stack has been switched this may not be the stack currently in use by the thread. h]h)}(hWhen a thread is freed the Guarded Control Stack initially allocated for that thread will be freed. Note carefully that if the stack has been switched this may not be the stack currently in use by the thread.h]hWhen a thread is freed the Guarded Control Stack initially allocated for that thread will be freed. Note carefully that if the stack has been switched this may not be the stack currently in use by the thread.}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjKubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhKthjhhubeh}(h]$allocation-of-guarded-control-stacksah ]h"]'3. allocation of guarded control stacksah$]h&]uh1hhhhhhhhKrubh)}(hhh](h)}(h4. Signal handlingh]h4. Signal handling}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqhhhhhKubh)}(hhh](h)}(hA new signal frame record gcs_context encodes the current GCS mode and pointer for the interrupted context on signal delivery. This will always be present on systems that support GCS. h]h)}(hA new signal frame record gcs_context encodes the current GCS mode and pointer for the interrupted context on signal delivery. This will always be present on systems that support GCS.h]hA new signal frame record gcs_context encodes the current GCS mode and pointer for the interrupted context on signal delivery. This will always be present on systems that support GCS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hThe record contains a flag field which reports the current GCS configuration for the interrupted context as PR_GET_SHADOW_STACK_STATUS would. h]h)}(hThe record contains a flag field which reports the current GCS configuration for the interrupted context as PR_GET_SHADOW_STACK_STATUS would.h]hThe record contains a flag field which reports the current GCS configuration for the interrupted context as PR_GET_SHADOW_STACK_STATUS would.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hVThe signal handler is run with the same GCS configuration as the interrupted context. h]h)}(hUThe signal handler is run with the same GCS configuration as the interrupted context.h]hUThe signal handler is run with the same GCS configuration as the interrupted context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hX When GCS is enabled for the interrupted thread a signal handling specific GCS cap token will be written to the GCS, this is an architectural GCS cap with the token type (bits 0..11) all clear. The GCSPR_EL0 reported in the signal frame will point to this cap token. h]h)}(hX When GCS is enabled for the interrupted thread a signal handling specific GCS cap token will be written to the GCS, this is an architectural GCS cap with the token type (bits 0..11) all clear. The GCSPR_EL0 reported in the signal frame will point to this cap token.h]hX When GCS is enabled for the interrupted thread a signal handling specific GCS cap token will be written to the GCS, this is an architectural GCS cap with the token type (bits 0..11) all clear. The GCSPR_EL0 reported in the signal frame will point to this cap token.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hEThe signal handler will use the same GCS as the interrupted context. h]h)}(hDThe signal handler will use the same GCS as the interrupted context.h]hDThe signal handler will use the same GCS as the interrupted context.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hWhen GCS is enabled on signal entry a frame with the address of the signal return handler will be pushed onto the GCS, allowing return from the signal handler via RET as normal. This will not be reported in the gcs_context in the signal frame. h]h)}(hWhen GCS is enabled on signal entry a frame with the address of the signal return handler will be pushed onto the GCS, allowing return from the signal handler via RET as normal. This will not be reported in the gcs_context in the signal frame.h]hWhen GCS is enabled on signal entry a frame with the address of the signal return handler will be pushed onto the GCS, allowing return from the signal handler via RET as normal. This will not be reported in the gcs_context in the signal frame.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhKhjqhhubeh}(h]signal-handlingah ]h"]4. signal handlingah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h5. Signal returnh]h5. Signal return}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hhhhhKubh)}(h%When returning from a signal handler:h]h%When returning from a signal handler:}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj#hhubh)}(hhh](h)}(hIf there is a gcs_context record in the signal frame then the GCS flags and GCSPR_EL0 will be restored from that context prior to further validation. h]h)}(hIf there is a gcs_context record in the signal frame then the GCS flags and GCSPR_EL0 will be restored from that context prior to further validation.h]hIf there is a gcs_context record in the signal frame then the GCS flags and GCSPR_EL0 will be restored from that context prior to further validation.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhNubh)}(hdIf there is no gcs_context record in the signal frame then the GCS configuration will be unchanged. h]h)}(hcIf there is no gcs_context record in the signal frame then the GCS configuration will be unchanged.h]hcIf there is no gcs_context record in the signal frame then the GCS configuration will be unchanged.}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj]ubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhNubh)}(hIf GCS is enabled on return from a signal handler then GCSPR_EL0 must point to a valid GCS signal cap record, this will be popped from the GCS prior to signal return. h]h)}(hIf GCS is enabled on return from a signal handler then GCSPR_EL0 must point to a valid GCS signal cap record, this will be popped from the GCS prior to signal return.h]hIf GCS is enabled on return from a signal handler then GCSPR_EL0 must point to a valid GCS signal cap record, this will be popped from the GCS prior to signal return.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjuubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhNubh)}(hIf the GCS configuration is locked when returning from a signal then any attempt to change the GCS configuration will be treated as an error. This is true even if GCS was not enabled prior to signal entry. h]h)}(hIf the GCS configuration is locked when returning from a signal then any attempt to change the GCS configuration will be treated as an error. This is true even if GCS was not enabled prior to signal entry.h]hIf the GCS configuration is locked when returning from a signal then any attempt to change the GCS configuration will be treated as an error. This is true even if GCS was not enabled prior to signal entry.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhNubh)}(hiGCS may be disabled via signal return but any attempt to enable GCS via signal return will be rejected. h]h)}(hgGCS may be disabled via signal return but any attempt to enable GCS via signal return will be rejected.h]hgGCS may be disabled via signal return but any attempt to enable GCS via signal return will be rejected.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjBhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhKhj#hhubeh}(h] signal-returnah ]h"]5. signal returnah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h6. ptrace extensionsh]h6. ptrace extensions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWA new regset NT_ARM_GCS is defined for use with PTRACE_GETREGSET and PTRACE_SETREGSET. h]h)}(hVA new regset NT_ARM_GCS is defined for use with PTRACE_GETREGSET and PTRACE_SETREGSET.h]hVA new regset NT_ARM_GCS is defined for use with PTRACE_GETREGSET and PTRACE_SETREGSET.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hThe GCS mode, including enable and disable, may be configured via ptrace. If GCS is enabled via ptrace no new GCS will be allocated for the thread. h]h)}(hThe GCS mode, including enable and disable, may be configured via ptrace. If GCS is enabled via ptrace no new GCS will be allocated for the thread.h]hThe GCS mode, including enable and disable, may be configured via ptrace. If GCS is enabled via ptrace no new GCS will be allocated for the thread.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(h/smaps.h]h)}(hTGuarded Control Stack pages will include "ss" in their VmFlags in /proc//smaps.h]hXGuarded Control Stack pages will include “ss” in their VmFlags in /proc//smaps.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubah}(h]h ]h"]h$]h&]jjuh1hhhhKhjohhubeh}(h]proc-extensionsah ]h"]8. /proc extensionsah$]h&]uh1hhhhhhhhKubeh}(h]/guarded-control-stack-support-for-aarch64-linuxah ]h"]/guarded control stack support for aarch64 linuxah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjjjnjkj jjjj2j/jljijju nametypes}(jjjjnj jj2jljuh}(jhjhjjjkjjjqjj#j/jjij5jjou footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.