Loading include/linux/personality.h +1 −39 Original line number Original line Diff line number Diff line Loading @@ -3,52 +3,14 @@ #include <uapi/linux/personality.h> #include <uapi/linux/personality.h> /* * 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 *); extern int __set_personality(unsigned int); /* * 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. * Return the base personality without flags. */ */ #define personality(pers) (pers & PER_MASK) #define personality(pers) (pers & PER_MASK) /* /* * Change personality of the currently running process. * Change personality of the currently running process. */ */ #define set_personality(pers) \ #define set_personality(pers) (current->personality = (pers)) ((current->personality == (pers)) ? 0 : __set_personality(pers)) #endif /* _LINUX_PERSONALITY_H */ #endif /* _LINUX_PERSONALITY_H */ include/linux/sched.h +0 −6 Original line number Original line Diff line number Diff line Loading @@ -125,7 +125,6 @@ struct sched_attr { u64 sched_period; u64 sched_period; }; }; struct exec_domain; struct futex_pi_state; struct futex_pi_state; struct robust_list_head; struct robust_list_head; struct bio_list; struct bio_list; Loading Loading @@ -2288,11 +2287,6 @@ extern void set_curr_task(int cpu, struct task_struct *p); void yield(void); void yield(void); /* * The default (Linux) execution domain. */ extern struct exec_domain default_exec_domain; union thread_union { union thread_union { struct thread_info thread_info; struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; unsigned long stack[THREAD_SIZE/sizeof(long)]; Loading kernel/exec_domain.c +0 −37 Original line number Original line Diff line number Diff line Loading @@ -20,43 +20,6 @@ #include <linux/types.h> #include <linux/types.h> #include <linux/fs_struct.h> #include <linux/fs_struct.h> static void default_handler(int, struct pt_regs *); static unsigned long ident_map[32] = { 0, 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 }; struct exec_domain default_exec_domain = { .name = "Linux", /* name */ .handler = default_handler, /* lcall7 causes a seg fault. */ .pers_low = 0, /* PER_LINUX personality. */ .pers_high = 0, /* PER_LINUX personality. */ .signal_map = ident_map, /* Identity map signals. */ .signal_invmap = ident_map, /* - both ways. */ }; static void default_handler(int segment, struct pt_regs *regp) { set_personality(0); if (current_thread_info()->exec_domain->handler != default_handler) current_thread_info()->exec_domain->handler(segment, regp); else send_sig(SIGSEGV, current, 1); } int __set_personality(unsigned int personality) { current->personality = personality; return 0; } EXPORT_SYMBOL(__set_personality); #ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS static int execdomains_proc_show(struct seq_file *m, void *v) static int execdomains_proc_show(struct seq_file *m, void *v) { { Loading Loading
include/linux/personality.h +1 −39 Original line number Original line Diff line number Diff line Loading @@ -3,52 +3,14 @@ #include <uapi/linux/personality.h> #include <uapi/linux/personality.h> /* * 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 *); extern int __set_personality(unsigned int); /* * 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. * Return the base personality without flags. */ */ #define personality(pers) (pers & PER_MASK) #define personality(pers) (pers & PER_MASK) /* /* * Change personality of the currently running process. * Change personality of the currently running process. */ */ #define set_personality(pers) \ #define set_personality(pers) (current->personality = (pers)) ((current->personality == (pers)) ? 0 : __set_personality(pers)) #endif /* _LINUX_PERSONALITY_H */ #endif /* _LINUX_PERSONALITY_H */
include/linux/sched.h +0 −6 Original line number Original line Diff line number Diff line Loading @@ -125,7 +125,6 @@ struct sched_attr { u64 sched_period; u64 sched_period; }; }; struct exec_domain; struct futex_pi_state; struct futex_pi_state; struct robust_list_head; struct robust_list_head; struct bio_list; struct bio_list; Loading Loading @@ -2288,11 +2287,6 @@ extern void set_curr_task(int cpu, struct task_struct *p); void yield(void); void yield(void); /* * The default (Linux) execution domain. */ extern struct exec_domain default_exec_domain; union thread_union { union thread_union { struct thread_info thread_info; struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; unsigned long stack[THREAD_SIZE/sizeof(long)]; Loading
kernel/exec_domain.c +0 −37 Original line number Original line Diff line number Diff line Loading @@ -20,43 +20,6 @@ #include <linux/types.h> #include <linux/types.h> #include <linux/fs_struct.h> #include <linux/fs_struct.h> static void default_handler(int, struct pt_regs *); static unsigned long ident_map[32] = { 0, 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 }; struct exec_domain default_exec_domain = { .name = "Linux", /* name */ .handler = default_handler, /* lcall7 causes a seg fault. */ .pers_low = 0, /* PER_LINUX personality. */ .pers_high = 0, /* PER_LINUX personality. */ .signal_map = ident_map, /* Identity map signals. */ .signal_invmap = ident_map, /* - both ways. */ }; static void default_handler(int segment, struct pt_regs *regp) { set_personality(0); if (current_thread_info()->exec_domain->handler != default_handler) current_thread_info()->exec_domain->handler(segment, regp); else send_sig(SIGSEGV, current, 1); } int __set_personality(unsigned int personality) { current->personality = personality; return 0; } EXPORT_SYMBOL(__set_personality); #ifdef CONFIG_PROC_FS #ifdef CONFIG_PROC_FS static int execdomains_proc_show(struct seq_file *m, void *v) static int execdomains_proc_show(struct seq_file *m, void *v) { { Loading