glibc/sysdeps
Yury Khrustalev f4d00dd60d AArch64: Add support for memory protection keys
This patch adds support for memory protection keys on AArch64 systems with
enabled Stage 1 permission overlays feature introduced in Armv8.9 / 9.4
(FEAT_S1POE) [1].

 1. Internal functions "pkey_read" and "pkey_write" to access data
    associated with memory protection keys.
 2. Implementation of API functions "pkey_get" and "pkey_set" for
    the AArch64 target.
 3. AArch64-specific PKEY flags for READ and EXECUTE (see below).
 4. New target-specific test that checks behaviour of pkeys on
    AArch64 targets.
 5. This patch also extends existing generic test for pkeys.
 6. HWCAP constant for Permission Overlay Extension feature.

To support more accurate mapping of underlying permissions to the
PKEY flags, we introduce additional AArch64-specific flags. The full
list of flags is:

 - PKEY_UNRESTRICTED: 0x0 (for completeness)
 - PKEY_DISABLE_ACCESS: 0x1 (existing flag)
 - PKEY_DISABLE_WRITE: 0x2 (existing flag)
 - PKEY_DISABLE_EXECUTE: 0x4 (new flag, AArch64 specific)
 - PKEY_DISABLE_READ: 0x8 (new flag, AArch64 specific)

The problem here is that PKEY_DISABLE_ACCESS has unusual semantics as
it overlaps with existing PKEY_DISABLE_WRITE and new PKEY_DISABLE_READ.
For this reason mapping between permission bits RWX and "restrictions"
bits awxr (a for disable access, etc) becomes complicated:

 - PKEY_DISABLE_ACCESS disables both R and W
 - PKEY_DISABLE_{WRITE,READ} disables W and R respectively
 - PKEY_DISABLE_EXECUTE disables X

Combinations like the one below are accepted although they are redundant:

 - PKEY_DISABLE_ACCESS | PKEY_DISABLE_READ | PKEY_DISABLE_WRITE

Reverse mapping tries to retain backward compatibility and ORs
PKEY_DISABLE_ACCESS whenever both flags PKEY_DISABLE_READ and
PKEY_DISABLE_WRITE would be present.

This will break code that compares pkey_get output with == instead
of using bitwise operations. The latter is more correct since PKEY_*
constants are essentially bit flags.

It should be noted that PKEY_DISABLE_ACCESS does not prevent execution.

[1] https://developer.arm.com/documentation/ddi0487/ka/ section D8.4.1.4

Co-authored-by: Szabolcs Nagy <szabolcs.nagy@arm.com>

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2024-11-20 11:30:58 +00:00
..
aarch64 AArch64: Remove thunderx{,2} memcpy 2024-11-20 11:23:53 +00:00
alpha math: Use log1pf from CORE-MATH 2024-11-01 11:27:39 -03:00
arc Fix femode_t conditionals for arc and or1k 2024-11-19 22:25:39 +00:00
arm math: Use log10p1f from CORE-MATH 2024-11-01 11:27:40 -03:00
csky math: Use log1pf from CORE-MATH 2024-11-01 11:27:39 -03:00
generic linux: Add support for getrandom vDSO 2024-11-12 14:42:12 -03:00
gnu sysdeps: Re-flow and sort multiline gnu/Makefile definitions 2024-08-07 11:02:03 -03:00
hppa hppa: Update libm-test-ulps 2024-11-12 21:32:54 -05:00
htl htl: move pthread_attr_init into libc. 2024-11-19 01:37:35 +01:00
hurd hurd: Move internal functions to internal header 2024-03-23 22:43:07 +01:00
i386 math: Use log10p1f from CORE-MATH 2024-11-01 11:27:40 -03:00
ieee754 math: Fix log10f on some ABIs 2024-11-07 07:59:43 -03:00
loongarch LoongArch: Update ulps 2024-11-12 09:19:23 +08:00
m68k math: Use log1pf from CORE-MATH 2024-11-01 11:27:39 -03:00
mach htl: move pthread_attr_init into libc. 2024-11-19 01:37:35 +01:00
microblaze math: Use log1pf from CORE-MATH 2024-11-01 11:27:39 -03:00
mips math: Use log10p1f from CORE-MATH 2024-11-01 11:27:40 -03:00
nios2 math: Use log1pf from CORE-MATH 2024-11-01 11:27:39 -03:00
nptl linux: Add support for getrandom vDSO 2024-11-12 14:42:12 -03:00
or1k Fix femode_t conditionals for arc and or1k 2024-11-19 22:25:39 +00:00
posix stdlib: Make abort/_Exit AS-safe (BZ 26275) 2024-10-08 14:40:12 -03:00
powerpc powerpc64le: Optimized strcat for POWER10 2024-11-19 15:59:15 -05:00
pthread Rename new tst-sem17 test to tst-sem18 2024-11-08 17:08:09 +00:00
riscv math: Use log10p1f from CORE-MATH 2024-11-01 11:27:40 -03:00
s390 s390x: Update ulps 2024-11-07 20:58:05 +01:00
sh math: Use log1pf from CORE-MATH 2024-11-01 11:27:39 -03:00
sparc math: Use log10p1f from CORE-MATH 2024-11-01 11:27:40 -03:00
unix AArch64: Add support for memory protection keys 2024-11-20 11:30:58 +00:00
wordsize-32 Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
wordsize-64 Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
x86 x86: Enable non-temporal memset for Hygon processors 2024-08-26 10:01:58 -07:00
x86_64 x86/string: Use movsl instead of movsd in strncpy/strncat [BZ #32344] 2024-11-13 10:09:30 -06:00