elf: Add a tunable to control use of tagged memory

Add a new glibc tunable: mem.tagging.  This is a decimal constant in
the range 0-255 but used as a bit-field.

Bit 0 enables use of tagged memory in the malloc family of functions.
Bit 1 enables precise faulting of tag failure on platforms where this
can be controlled.
Other bits are currently unused, but if set will cause memory tag
checking for the current process to be enabled in the kernel.
This commit is contained in:
Richard Earnshaw 2020-12-21 15:03:03 +00:00
parent 3378408987
commit 26450d04d3
2 changed files with 44 additions and 0 deletions

View file

@ -141,4 +141,13 @@ glibc {
default: 512
}
}
mem {
tagging {
type: INT_32
minval: 0
maxval: 255
security_level: SXID_IGNORE
}
}
}

View file

@ -36,6 +36,8 @@ their own namespace.
* POSIX Thread Tunables:: Tunables in the POSIX thread subsystem
* Hardware Capability Tunables:: Tunables that modify the hardware
capabilities seen by @theglibc{}
* Memory Related Tunables:: Tunables that control the use of memory by
@theglibc{}.
@end menu
@node Tunable names
@ -484,3 +486,36 @@ instead.
This tunable is specific to i386 and x86-64.
@end deftp
@node Memory Related Tunables
@section Memory Related Tunables
@cindex memory related tunables
@deftp {Tunable namespace} glibc.mem
This tunable namespace supports operations that affect the way @theglibc{}
and the process manage memory.
@end deftp
@deftp Tunable glibc.mem.tagging
If the hardware supports memory tagging, this tunable can be used to
control the way @theglibc{} uses this feature. At present this is only
supported on AArch64 systems with the MTE extention; it is ignored for
all other systems.
This tunable takes a value between 0 and 255 and acts as a bitmask
that enables various capabilities.
Bit 0 (the least significant bit) causes the malloc subsystem to allocate
tagged memory, with each allocation being assigned a random tag.
Bit 1 enables precise faulting mode for tag violations on systems that
support deferred tag violation reporting. This may cause programs
to run more slowly.
Other bits are currently reserved.
@Theglibc{} startup code will automatically enable memory tagging
support in the kernel if this tunable has any non-zero value.
The default value is @samp{0}, which disables all memory tagging.
@end deftp