blob: 1e71ba99711456b6c9a1b873d2a6cfc46c0439cf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
$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.
|