2005-04-17 02:20:36 +04:00
/*
* Handling of different ABIs ( personalities ) .
*
* We group personalities into execution domains which have their
* own handlers for kernel entry points , signal mapping , etc . . .
*
* 2001 - 05 - 06 Complete rewrite , Christoph Hellwig ( hch @ infradead . org )
*/
# include <linux/init.h>
# include <linux/kernel.h>
# include <linux/kmod.h>
# include <linux/module.h>
# include <linux/personality.h>
2008-10-04 14:28:09 +04:00
# include <linux/proc_fs.h>
2005-04-17 02:20:36 +04:00
# include <linux/sched.h>
2008-10-04 14:28:09 +04:00
# include <linux/seq_file.h>
2005-04-17 02:20:36 +04:00
# include <linux/syscalls.h>
# include <linux/sysctl.h>
# include <linux/types.h>
2009-03-30 03:50:06 +04:00
# include <linux/fs_struct.h>
2005-04-17 02:20:36 +04:00
2008-10-04 14:28:09 +04:00
# ifdef CONFIG_PROC_FS
static int execdomains_proc_show ( struct seq_file * m , void * v )
2005-04-17 02:20:36 +04:00
{
2015-03-30 09:14:16 +03:00
seq_puts ( m , " 0-0 \t Linux \t [kernel] \n " ) ;
2008-10-04 14:28:09 +04:00
return 0 ;
}
static int execdomains_proc_open ( struct inode * inode , struct file * file )
{
return single_open ( file , execdomains_proc_show , NULL ) ;
}
static const struct file_operations execdomains_proc_fops = {
. open = execdomains_proc_open ,
. read = seq_read ,
. llseek = seq_lseek ,
. release = single_release ,
} ;
static int __init proc_execdomains_init ( void )
{
proc_create ( " execdomains " , 0 , NULL , & execdomains_proc_fops ) ;
return 0 ;
2005-04-17 02:20:36 +04:00
}
2008-10-04 14:28:09 +04:00
module_init ( proc_execdomains_init ) ;
# endif
2005-04-17 02:20:36 +04:00
2010-06-05 01:14:58 +04:00
SYSCALL_DEFINE1 ( personality , unsigned int , personality )
2005-04-17 02:20:36 +04:00
{
2010-06-05 01:14:58 +04:00
unsigned int old = current - > personality ;
2005-04-17 02:20:36 +04:00
2010-08-10 04:20:30 +04:00
if ( personality ! = 0xffffffff )
2005-04-17 02:20:36 +04:00
set_personality ( personality ) ;
2010-06-05 01:14:58 +04:00
return old ;
2005-04-17 02:20:36 +04:00
}