Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.0-rc7 68 lines 1.5 kB view raw
1/* 2 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 3 * Licensed under the GPL 4 */ 5 6#include "linux/file.h" 7#include "linux/fs.h" 8#include "linux/mm.h" 9#include "linux/sched.h" 10#include "linux/utsname.h" 11#include "linux/syscalls.h" 12#include "asm/current.h" 13#include "asm/mman.h" 14#include "asm/uaccess.h" 15#include "asm/unistd.h" 16#include "internal.h" 17 18long sys_fork(void) 19{ 20 long ret; 21 22 current->thread.forking = 1; 23 ret = do_fork(SIGCHLD, UPT_SP(&current->thread.regs.regs), 24 &current->thread.regs, 0, NULL, NULL); 25 current->thread.forking = 0; 26 return ret; 27} 28 29long sys_vfork(void) 30{ 31 long ret; 32 33 current->thread.forking = 1; 34 ret = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 35 UPT_SP(&current->thread.regs.regs), 36 &current->thread.regs, 0, NULL, NULL); 37 current->thread.forking = 0; 38 return ret; 39} 40 41long old_mmap(unsigned long addr, unsigned long len, 42 unsigned long prot, unsigned long flags, 43 unsigned long fd, unsigned long offset) 44{ 45 long err = -EINVAL; 46 if (offset & ~PAGE_MASK) 47 goto out; 48 49 err = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT); 50 out: 51 return err; 52} 53 54int kernel_execve(const char *filename, 55 const char *const argv[], 56 const char *const envp[]) 57{ 58 mm_segment_t fs; 59 int ret; 60 61 fs = get_fs(); 62 set_fs(KERNEL_DS); 63 ret = um_execve(filename, (const char __user *const __user *)argv, 64 (const char __user *const __user *) envp); 65 set_fs(fs); 66 67 return ret; 68}