Rev 5270 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5270 | Rev 6082 | ||
---|---|---|---|
1 | #ifndef _LINUX_PERSONALITY_H |
1 | #ifndef _LINUX_PERSONALITY_H |
2 | #define _LINUX_PERSONALITY_H |
2 | #define _LINUX_PERSONALITY_H |
3 | 3 | ||
4 | #include |
4 | #include |
5 | 5 | ||
6 | 6 | ||
7 | /* |
7 | /* |
8 | * Handling of different ABIs (personalities). |
8 | * Handling of different ABIs (personalities). |
9 | */ |
9 | */ |
10 | 10 | ||
11 | struct exec_domain; |
11 | struct exec_domain; |
12 | struct pt_regs; |
12 | struct pt_regs; |
13 | 13 | ||
14 | extern int register_exec_domain(struct exec_domain *); |
14 | extern int register_exec_domain(struct exec_domain *); |
15 | extern int unregister_exec_domain(struct exec_domain *); |
15 | extern int unregister_exec_domain(struct exec_domain *); |
16 | extern int __set_personality(unsigned int); |
16 | extern int __set_personality(unsigned int); |
17 | 17 | ||
18 | 18 | ||
19 | /* |
19 | /* |
20 | * Description of an execution domain. |
20 | * Description of an execution domain. |
21 | * |
21 | * |
22 | * The first two members are refernced from assembly source |
22 | * The first two members are refernced from assembly source |
23 | * and should stay where they are unless explicitly needed. |
23 | * and should stay where they are unless explicitly needed. |
24 | */ |
24 | */ |
25 | typedef void (*handler_t)(int, struct pt_regs *); |
25 | typedef void (*handler_t)(int, struct pt_regs *); |
26 | 26 | ||
27 | struct exec_domain { |
27 | struct exec_domain { |
28 | const char *name; /* name of the execdomain */ |
28 | const char *name; /* name of the execdomain */ |
29 | handler_t handler; /* handler for syscalls */ |
29 | handler_t handler; /* handler for syscalls */ |
30 | unsigned char pers_low; /* lowest personality */ |
30 | unsigned char pers_low; /* lowest personality */ |
31 | unsigned char pers_high; /* highest personality */ |
31 | unsigned char pers_high; /* highest personality */ |
32 | unsigned long *signal_map; /* signal mapping */ |
32 | unsigned long *signal_map; /* signal mapping */ |
33 | unsigned long *signal_invmap; /* reverse signal mapping */ |
33 | unsigned long *signal_invmap; /* reverse signal mapping */ |
34 | struct map_segment *err_map; /* error mapping */ |
34 | struct map_segment *err_map; /* error mapping */ |
35 | struct map_segment *socktype_map; /* socket type mapping */ |
35 | struct map_segment *socktype_map; /* socket type mapping */ |
36 | struct map_segment *sockopt_map; /* socket option mapping */ |
36 | struct map_segment *sockopt_map; /* socket option mapping */ |
37 | struct map_segment *af_map; /* address family mapping */ |
37 | struct map_segment *af_map; /* address family mapping */ |
38 | struct module *module; /* module context of the ed. */ |
38 | struct module *module; /* module context of the ed. */ |
39 | struct exec_domain *next; /* linked list (internal) */ |
39 | struct exec_domain *next; /* linked list (internal) */ |
40 | }; |
40 | }; |
41 | 41 | ||
42 | /* |
42 | /* |
43 | * Return the base personality without flags. |
43 | * Return the base personality without flags. |
44 | */ |
44 | */ |
45 | #define personality(pers) (pers & PER_MASK) |
45 | #define personality(pers) (pers & PER_MASK) |
46 | - | ||
47 | 46 | ||
48 | /* |
47 | /* |
49 | * Change personality of the currently running process. |
48 | * Change personality of the currently running process. |
50 | */ |
49 | */ |
51 | #define set_personality(pers) \ |
- | |
52 | ((current->personality == (pers)) ? 0 : __set_personality(pers)) |
50 | #define set_personality(pers) (current->personality = (pers)) |
53 | 51 | ||
54 | #endif /* _LINUX_PERSONALITY_H */ |
52 | #endif /* _LINUX_PERSONALITY_H */ |