1#ifndef _LINUX_PERSONALITY_H
2#define _LINUX_PERSONALITY_H
3
4
5
6
7
8struct exec_domain;
9struct pt_regs;
10
11extern int register_exec_domain(struct exec_domain *);
12extern int unregister_exec_domain(struct exec_domain *);
13extern int __set_personality(unsigned long);
14
15
16
17
18
19
20enum {
21 FDPIC_FUNCPTRS = 0x0080000,
22
23
24 MMAP_PAGE_ZERO = 0x0100000,
25 ADDR_COMPAT_LAYOUT = 0x0200000,
26 READ_IMPLIES_EXEC = 0x0400000,
27 ADDR_LIMIT_32BIT = 0x0800000,
28 SHORT_INODE = 0x1000000,
29 WHOLE_SECONDS = 0x2000000,
30 STICKY_TIMEOUTS = 0x4000000,
31 ADDR_LIMIT_3GB = 0x8000000,
32};
33
34
35
36
37
38#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC)
39
40
41
42
43
44
45
46enum {
47 PER_LINUX = 0x0000,
48 PER_LINUX_32BIT = 0x0000 | ADDR_LIMIT_32BIT,
49 PER_LINUX_FDPIC = 0x0000 | FDPIC_FUNCPTRS,
50 PER_SVR4 = 0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
51 PER_SVR3 = 0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
52 PER_SCOSVR3 = 0x0003 | STICKY_TIMEOUTS |
53 WHOLE_SECONDS | SHORT_INODE,
54 PER_OSR5 = 0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
55 PER_WYSEV386 = 0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
56 PER_ISCR4 = 0x0005 | STICKY_TIMEOUTS,
57 PER_BSD = 0x0006,
58 PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
59 PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
60 PER_LINUX32 = 0x0008,
61 PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB,
62 PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS,
63 PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS,
64 PER_IRIX64 = 0x000b | STICKY_TIMEOUTS,
65 PER_RISCOS = 0x000c,
66 PER_SOLARIS = 0x000d | STICKY_TIMEOUTS,
67 PER_UW7 = 0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
68 PER_OSF4 = 0x000f,
69 PER_HPUX = 0x0010,
70 PER_MASK = 0x00ff,
71};
72
73
74
75
76
77
78
79
80typedef void (*handler_t)(int, struct pt_regs *);
81
82struct exec_domain {
83 const char *name;
84 handler_t handler;
85 unsigned char pers_low;
86 unsigned char pers_high;
87 unsigned long *signal_map;
88 unsigned long *signal_invmap;
89 struct map_segment *err_map;
90 struct map_segment *socktype_map;
91 struct map_segment *sockopt_map;
92 struct map_segment *af_map;
93 struct module *module;
94 struct exec_domain *next;
95};
96
97
98
99
100#define personality(pers) (pers & PER_MASK)
101
102
103
104
105#define get_personality (current->personality)
106
107
108
109
110#define set_personality(pers) \
111 ((current->personality == pers) ? 0 : __set_personality(pers))
112
113#endif
114