Blame view

include/linux/personality.h 3.45 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef _LINUX_PERSONALITY_H
  #define _LINUX_PERSONALITY_H
34e856e6a   Ralf Baechle   [PATCH] Make <lin...
3
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
5
6
7
8
9
10
11
12
  /*
   * Handling of different ABIs (personalities).
   */
  
  struct exec_domain;
  struct pt_regs;
  
  extern int		register_exec_domain(struct exec_domain *);
  extern int		unregister_exec_domain(struct exec_domain *);
485d52768   Oleg Nesterov   sys_personality: ...
13
  extern int		__set_personality(unsigned int);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
14

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

34e856e6a   Ralf Baechle   [PATCH] Make <lin...
114
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
115
  #endif /* _LINUX_PERSONALITY_H */