Skip to content

Commit 830ae8a

Browse files
brooniectmarinas
authored andcommitted
arm64: Document boot requirements for Guarded Control Stacks
FEAT_GCS introduces a number of new system registers, we require that access to these registers is not trapped when we identify that the feature is present. There is also a HCRX_EL2 control to make GCS operations functional. Since if GCS is enabled any function call instruction will cause a fault we also require that the feature be specifically disabled, existing kernels implicitly have this requirement and especially given that the MMU must be disabled it is difficult to see a situation where leaving GCS enabled would be reasonable. Reviewed-by: Thiago Jung Bauermann <[email protected]> Reviewed-by: Catalin Marinas <[email protected]> Signed-off-by: Mark Brown <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Catalin Marinas <[email protected]>
1 parent 3630e82 commit 830ae8a

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

Documentation/arch/arm64/booting.rst

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,38 @@ Before jumping into the kernel, the following conditions must be met:
411411

412412
- HFGRWR_EL2.nPIRE0_EL1 (bit 57) must be initialised to 0b1.
413413

414+
- For CPUs with Guarded Control Stacks (FEAT_GCS):
415+
416+
- GCSCR_EL1 must be initialised to 0.
417+
418+
- GCSCRE0_EL1 must be initialised to 0.
419+
420+
- If EL3 is present:
421+
422+
- SCR_EL3.GCSEn (bit 39) must be initialised to 0b1.
423+
424+
- If EL2 is present:
425+
426+
- GCSCR_EL2 must be initialised to 0.
427+
428+
- If the kernel is entered at EL1 and EL2 is present:
429+
430+
- HCRX_EL2.GCSEn must be initialised to 0b1.
431+
432+
- HFGITR_EL2.nGCSEPP (bit 59) must be initialised to 0b1.
433+
434+
- HFGITR_EL2.nGCSSTR_EL1 (bit 58) must be initialised to 0b1.
435+
436+
- HFGITR_EL2.nGCSPUSHM_EL1 (bit 57) must be initialised to 0b1.
437+
438+
- HFGRTR_EL2.nGCS_EL1 (bit 53) must be initialised to 0b1.
439+
440+
- HFGRTR_EL2.nGCS_EL0 (bit 52) must be initialised to 0b1.
441+
442+
- HFGWTR_EL2.nGCS_EL1 (bit 53) must be initialised to 0b1.
443+
444+
- HFGWTR_EL2.nGCS_EL0 (bit 52) must be initialised to 0b1.
445+
414446
The requirements described above for CPU mode, caches, MMUs, architected
415447
timers, coherency and system registers apply to all CPUs. All CPUs must
416448
enter the kernel in the same exception level. Where the values documented

0 commit comments

Comments
 (0)