summaryrefslogtreecommitdiff
path: root/libexec/ld.so/SPECS.randomdata
blob: 2cbde3fd41d5c5ffe8dd30aeacdbcc7bfa6002bd (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.2 2015/02/06 23:58:12 deraadt 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 65536 bytes.