mirror of
https://github.com/openbsd/src.git
synced 2026-06-18 07:13:36 +02:00
8b424531a0
ok deraadt@
49 lines
1.5 KiB
Plaintext
49 lines
1.5 KiB
Plaintext
$OpenBSD: SPECS.randomdata,v 1.3 2018/06/01 03:27:59 mortimer Exp $
|
|
|
|
This document describes the OpenBSD operating system supplement for
|
|
adding "random data" sections to the ELF ABI. These sections can be
|
|
useful for holding values like GCC's stack-smashing protector cookies
|
|
and offer additional benefits like ensuring the data is initialized
|
|
before any constructor methods are called and allowing the dynamic
|
|
linker to mark the memory as read-only after initialization.
|
|
|
|
|
|
Program Header
|
|
|
|
OpenBSD defines the following operating system-specific segment type:
|
|
|
|
Name Value
|
|
PT_OPENBSD_RANDOMIZE 0x65a3dbe6
|
|
|
|
|
|
PT_OPENBSD_RANDOMIZE
|
|
|
|
The array element specifies the location and size of a random data
|
|
section. The system will initialize the specified memory range
|
|
with random data. The memory range must be separately mapped
|
|
(e.g., by use of a PT_LOAD segment).
|
|
|
|
|
|
Special Sections
|
|
|
|
OpenBSD defines the following operating system-specific special
|
|
sections:
|
|
|
|
Name Type Attributes
|
|
.openbsd.randomdata SHT_PROGBITS SHF_ALLOC
|
|
|
|
|
|
.openbsd.randomdata
|
|
|
|
This section holds the random data section.
|
|
|
|
|
|
Implementation Notes
|
|
|
|
On OpenBSD, PT_OPENBSD_RANDOMIZE segments are handled alongside
|
|
PT_LOAD segments: the kernel handles initializing random data segments
|
|
in executables and program interpreters (i.e., ld.so), while ld.so
|
|
handles initializing them in shared libraries. Additionally, the
|
|
kernel limits the total number of PT_OPENBSD_RANDOMIZE segment bytes
|
|
in an executable or interpreter to 1048576 bytes.
|