2006-07-10 04:45:13 -07:00
/*
2007-10-16 01:27:00 -07:00
* Copyright ( C ) 2000 - 2007 Jeff Dike ( jdike @ { addtoit , linux . intel } . com )
2005-04-16 15:20:36 -07:00
* Licensed under the GPL
*/
# include "linux/file.h"
2007-07-30 02:36:13 +04:00
# include "linux/fs.h"
2007-10-16 01:27:00 -07:00
# include "linux/mm.h"
# include "linux/sched.h"
2005-04-16 15:20:36 -07:00
# include "linux/utsname.h"
2009-11-30 17:37:04 -05:00
# include "linux/syscalls.h"
2007-10-16 01:27:00 -07:00
# include "asm/current.h"
2005-04-16 15:20:36 -07:00
# include "asm/mman.h"
# include "asm/uaccess.h"
2007-10-16 01:27:00 -07:00
# include "asm/unistd.h"
2008-08-18 04:01:47 -04:00
# include "internal.h"
2005-04-16 15:20:36 -07:00
long sys_fork ( void )
{
long ret ;
current - > thread . forking = 1 ;
2005-06-25 14:55:21 -07:00
ret = do_fork ( SIGCHLD , UPT_SP ( & current - > thread . regs . regs ) ,
& current - > thread . regs , 0 , NULL , NULL ) ;
2005-04-16 15:20:36 -07:00
current - > thread . forking = 0 ;
2007-10-16 01:27:00 -07:00
return ret ;
2005-04-16 15:20:36 -07:00
}
long sys_vfork ( void )
{
long ret ;
current - > thread . forking = 1 ;
2005-06-25 14:55:21 -07:00
ret = do_fork ( CLONE_VFORK | CLONE_VM | SIGCHLD ,
UPT_SP ( & current - > thread . regs . regs ) ,
& current - > thread . regs , 0 , NULL , NULL ) ;
2005-04-16 15:20:36 -07:00
current - > thread . forking = 0 ;
2007-10-16 01:27:00 -07:00
return ret ;
2005-04-16 15:20:36 -07:00
}
long old_mmap ( unsigned long addr , unsigned long len ,
unsigned long prot , unsigned long flags ,
unsigned long fd , unsigned long offset )
{
long err = - EINVAL ;
if ( offset & ~ PAGE_MASK )
goto out ;
2009-11-30 17:37:04 -05:00
err = sys_mmap_pgoff ( addr , len , prot , flags , fd , offset > > PAGE_SHIFT ) ;
2005-04-16 15:20:36 -07:00
out :
return err ;
}
2010-08-17 23:52:56 +01:00
int kernel_execve ( const char * filename ,
const char * const argv [ ] ,
const char * const envp [ ] )
2006-10-02 02:18:31 -07:00
{
mm_segment_t fs ;
int ret ;
fs = get_fs ( ) ;
set_fs ( KERNEL_DS ) ;
2010-09-22 13:05:07 -07:00
ret = um_execve ( filename , ( const char __user * const __user * ) argv ,
( const char __user * const __user * ) envp ) ;
2006-10-02 02:18:31 -07:00
set_fs ( fs ) ;
return ret ;
}