source: svn/trunk/newcon3bcm2_21bu/toolchain/mips-linux-uclibc/include/linux/personality.h @ 2

Last change on this file since 2 was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 3.4 KB
Line 
1#ifndef _LINUX_PERSONALITY_H
2#define _LINUX_PERSONALITY_H
3
4/*
5 * Handling of different ABIs (personalities).
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 * Flags for bug emulation.
17 *
18 * These occupy the top three bytes.
19 */
20enum {
21        ADDR_NO_RANDOMIZE =     0x0040000,      /* disable randomization of VA space */
22        FDPIC_FUNCPTRS =        0x0080000,      /* userspace function ptrs point to descriptors
23                                                 * (signal handling)
24                                                 */
25        MMAP_PAGE_ZERO =        0x0100000,
26        ADDR_COMPAT_LAYOUT =    0x0200000,
27        READ_IMPLIES_EXEC =     0x0400000,
28        ADDR_LIMIT_32BIT =      0x0800000,
29        SHORT_INODE =           0x1000000,
30        WHOLE_SECONDS =         0x2000000,
31        STICKY_TIMEOUTS =       0x4000000,
32        ADDR_LIMIT_3GB =        0x8000000
33};
34
35/*
36 * Security-relevant compatibility flags that must be
37 * cleared upon setuid or setgid exec:
38 */
39#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC|ADDR_NO_RANDOMIZE)
40
41/*
42 * Personality types.
43 *
44 * These go in the low byte.  Avoid using the top bit, it will
45 * conflict with error returns.
46 */
47enum {
48        PER_LINUX =             0x0000,
49        PER_LINUX_32BIT =       0x0000 | ADDR_LIMIT_32BIT,
50        PER_LINUX_FDPIC =       0x0000 | FDPIC_FUNCPTRS,
51        PER_SVR4 =              0x0001 | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
52        PER_SVR3 =              0x0002 | STICKY_TIMEOUTS | SHORT_INODE,
53        PER_SCOSVR3 =           0x0003 | STICKY_TIMEOUTS |
54                                         WHOLE_SECONDS | SHORT_INODE,
55        PER_OSR5 =              0x0003 | STICKY_TIMEOUTS | WHOLE_SECONDS,
56        PER_WYSEV386 =          0x0004 | STICKY_TIMEOUTS | SHORT_INODE,
57        PER_ISCR4 =             0x0005 | STICKY_TIMEOUTS,
58        PER_BSD =               0x0006,
59        PER_SUNOS =             0x0006 | STICKY_TIMEOUTS,
60        PER_XENIX =             0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
61        PER_LINUX32 =           0x0008,
62        PER_LINUX32_3GB =       0x0008 | ADDR_LIMIT_3GB,
63        PER_IRIX32 =            0x0009 | STICKY_TIMEOUTS,/* IRIX5 32-bit */
64        PER_IRIXN32 =           0x000a | STICKY_TIMEOUTS,/* IRIX6 new 32-bit */
65        PER_IRIX64 =            0x000b | STICKY_TIMEOUTS,/* IRIX6 64-bit */
66        PER_RISCOS =            0x000c,
67        PER_SOLARIS =           0x000d | STICKY_TIMEOUTS,
68        PER_UW7 =               0x000e | STICKY_TIMEOUTS | MMAP_PAGE_ZERO,
69        PER_OSF4 =              0x000f,                  /* OSF/1 v4 */
70        PER_HPUX =              0x0010,
71        PER_MASK =              0x00ff
72};
73
74
75/*
76 * Description of an execution domain.
77 *
78 * The first two members are refernced from assembly source
79 * and should stay where they are unless explicitly needed.
80 */
81typedef void (*handler_t)(int, struct pt_regs *);
82
83struct exec_domain {
84        const char              *name;          /* name of the execdomain */
85        handler_t               handler;        /* handler for syscalls */
86        unsigned char           pers_low;       /* lowest personality */
87        unsigned char           pers_high;      /* highest personality */
88        unsigned long           *signal_map;    /* signal mapping */
89        unsigned long           *signal_invmap; /* reverse signal mapping */
90        struct map_segment      *err_map;       /* error mapping */
91        struct map_segment      *socktype_map;  /* socket type mapping */
92        struct map_segment      *sockopt_map;   /* socket option mapping */
93        struct map_segment      *af_map;        /* address family mapping */
94        struct module           *module;        /* module context of the ed. */
95        struct exec_domain      *next;          /* linked list (internal) */
96};
97
98/*
99 * Return the base personality without flags.
100 */
101#define personality(pers)       (pers & PER_MASK)
102
103/*
104 * Personality of the currently running process.
105 */
106#define get_personality         (current->personality)
107
108/*
109 * Change personality of the currently running process.
110 */
111#define set_personality(pers) \
112        ((current->personality == pers) ? 0 : __set_personality(pers))
113
114#endif /* _LINUX_PERSONALITY_H */
Note: See TracBrowser for help on using the repository browser.