mirror of
				https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
				synced 2025-10-31 17:04:14 +10:00 
			
		
		
		
	[PATCH] rename the provided execve functions to kernel_execve
Some architectures provide an execve function that does not set errno, but instead returns the result code directly. Rename these to kernel_execve to get the right semantics there. Moreover, there is no reasone for any of these architectures to still provide __KERNEL_SYSCALLS__ or _syscallN macros, so remove these right away. [akpm@osdl.org: build fix] [bunk@stusta.de: build fix] Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Andi Kleen <ak@muc.de> Acked-by: Paul Mackerras <paulus@samba.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Richard Henderson <rth@twiddle.net> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Ian Molton <spyro@f2s.com> Cc: Mikael Starvik <starvik@axis.com> Cc: David Howells <dhowells@redhat.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Hirokazu Takata <takata.hirokazu@renesas.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Paul Mundt <lethal@linux-sh.org> Cc: Kazumoto Kojima <kkojima@rr.iij4u.or.jp> Cc: Richard Curnow <rc@rc0.org.uk> Cc: William Lee Irwin III <wli@holomorphy.com> Cc: "David S. Miller" <davem@davemloft.net> Cc: Jeff Dike <jdike@addtoit.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp> Cc: Chris Zankel <chris@zankel.net> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Adrian Bunk <bunk@stusta.de> Cc: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
		
							parent
							
								
									6760856791
								
							
						
					
					
						commit
						3db03b4afb
					
				| @ -36,7 +36,6 @@ | ||||
| #include <asm/cacheflush.h> | ||||
| #include <asm/vga.h> | ||||
| 
 | ||||
| #define __KERNEL_SYSCALLS__ | ||||
| #include <asm/unistd.h> | ||||
| 
 | ||||
| extern struct hwrpb_struct *hwrpb; | ||||
| @ -116,7 +115,7 @@ EXPORT_SYMBOL(sys_dup); | ||||
| EXPORT_SYMBOL(sys_exit); | ||||
| EXPORT_SYMBOL(sys_write); | ||||
| EXPORT_SYMBOL(sys_lseek); | ||||
| EXPORT_SYMBOL(execve); | ||||
| EXPORT_SYMBOL(kernel_execve); | ||||
| EXPORT_SYMBOL(sys_setsid); | ||||
| EXPORT_SYMBOL(sys_wait4); | ||||
| 
 | ||||
|  | ||||
| @ -655,12 +655,12 @@ kernel_thread: | ||||
| .end kernel_thread
 | ||||
| 
 | ||||
| /* | ||||
|  * execve(path, argv, envp) | ||||
|  * kernel_execve(path, argv, envp) | ||||
|  */ | ||||
| 	.align	4
 | ||||
| 	.globl	execve
 | ||||
| 	.ent	execve
 | ||||
| execve: | ||||
| 	.globl	kernel_execve
 | ||||
| 	.ent	kernel_execve
 | ||||
| kernel_execve: | ||||
| 	/* We can be called from a module.  */ | ||||
| 	ldgp	$gp, 0($27) | ||||
| 	lda	$sp, -(32+SIZEOF_PT_REGS+8)($sp) | ||||
| @ -704,7 +704,7 @@ execve: | ||||
| 
 | ||||
| 1:	lda	$sp, 32+SIZEOF_PT_REGS+8($sp) | ||||
| 	ret | ||||
| .end execve
 | ||||
| .end kernel_execve
 | ||||
| 
 | ||||
|  | ||||
| /* | ||||
|  | ||||
| @ -279,7 +279,7 @@ out: | ||||
| 	return error; | ||||
| } | ||||
| 
 | ||||
| long execve(const char *filename, char **argv, char **envp) | ||||
| int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | ||||
| { | ||||
| 	struct pt_regs regs; | ||||
| 	int ret; | ||||
| @ -317,7 +317,7 @@ long execve(const char *filename, char **argv, char **envp) | ||||
|  out: | ||||
| 	return ret; | ||||
| } | ||||
| EXPORT_SYMBOL(execve); | ||||
| EXPORT_SYMBOL(kernel_execve); | ||||
| 
 | ||||
| /*
 | ||||
|  * Since loff_t is a 64 bit type we avoid a lot of ABI hastle | ||||
|  | ||||
| @ -283,7 +283,7 @@ out: | ||||
| } | ||||
| 
 | ||||
| /* FIXME - see if this is correct for arm26 */ | ||||
| long execve(const char *filename, char **argv, char **envp) | ||||
| int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | ||||
| { | ||||
| 	struct pt_regs regs; | ||||
|         int ret; | ||||
| @ -320,4 +320,4 @@ long execve(const char *filename, char **argv, char **envp) | ||||
|         return ret; | ||||
| } | ||||
| 
 | ||||
| EXPORT_SYMBOL(execve); | ||||
| EXPORT_SYMBOL(kernel_execve); | ||||
|  | ||||
| @ -492,11 +492,11 @@ GLOBAL_ENTRY(prefetch_stack) | ||||
| 	br.ret.sptk.many rp | ||||
| END(prefetch_stack) | ||||
| 
 | ||||
| GLOBAL_ENTRY(execve) | ||||
| GLOBAL_ENTRY(kernel_execve) | ||||
| 	mov r15=__NR_execve			// put syscall number in place | ||||
| 	break __BREAK_SYSCALL | ||||
| 	br.ret.sptk.many rp | ||||
| END(execve) | ||||
| END(kernel_execve) | ||||
| 
 | ||||
| GLOBAL_ENTRY(clone) | ||||
| 	mov r15=__NR_clone			// put syscall number in place | ||||
|  | ||||
| @ -368,7 +368,14 @@ out: | ||||
| 	return error; | ||||
| } | ||||
| 
 | ||||
| unsigned long  | ||||
| extern int __execve(const char *filename, char *const argv[], | ||||
| 		char *const envp[], struct task_struct *task); | ||||
| int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | ||||
| { | ||||
| 	return __execve(filename, argv, envp, current); | ||||
| } | ||||
| 
 | ||||
| unsigned long | ||||
| get_wchan(struct task_struct *p) | ||||
| { | ||||
| 	struct unwind_frame_info info; | ||||
|  | ||||
| @ -843,7 +843,7 @@ _GLOBAL(kernel_thread) | ||||
| 	addi	r1,r1,16 | ||||
| 	blr | ||||
| 
 | ||||
| _GLOBAL(execve) | ||||
| _GLOBAL(kernel_execve) | ||||
| 	li	r0,__NR_execve | ||||
| 	sc | ||||
| 	bnslr | ||||
|  | ||||
| @ -556,7 +556,7 @@ _GLOBAL(giveup_altivec) | ||||
| 
 | ||||
| #endif /* CONFIG_ALTIVEC */ | ||||
| 
 | ||||
| _GLOBAL(execve) | ||||
| _GLOBAL(kernel_execve) | ||||
| 	li	r0,__NR_execve | ||||
| 	sc | ||||
| 	bnslr | ||||
|  | ||||
| @ -164,3 +164,16 @@ int next_syscall_index(int limit) | ||||
| 	spin_unlock(&syscall_lock); | ||||
| 	return(ret); | ||||
| } | ||||
| 
 | ||||
| int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | ||||
| { | ||||
| 	mm_segment_t fs; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	fs = get_fs(); | ||||
| 	set_fs(KERNEL_DS); | ||||
| 	ret = um_execve(filename, argv, envp); | ||||
| 	set_fs(fs); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| @ -1023,7 +1023,7 @@ ENDPROC(child_rip) | ||||
|  * do_sys_execve asm fallback arguments: | ||||
|  *	rdi: name, rsi: argv, rdx: envp, fake frame on the stack | ||||
|  */ | ||||
| ENTRY(execve) | ||||
| ENTRY(kernel_execve) | ||||
| 	CFI_STARTPROC | ||||
| 	FAKE_STACK_FRAME $0 | ||||
| 	SAVE_ALL	 | ||||
| @ -1036,7 +1036,7 @@ ENTRY(execve) | ||||
| 	UNFAKE_STACK_FRAME | ||||
| 	ret | ||||
| 	CFI_ENDPROC | ||||
| ENDPROC(execve) | ||||
| ENDPROC(kernel_execve) | ||||
| 
 | ||||
| KPROBE_ENTRY(page_fault) | ||||
| 	errorentry do_page_fault | ||||
|  | ||||
| @ -4,9 +4,6 @@ | ||||
|  * Copyright (C) 2001 David S. Miller (davem@redhat.com) | ||||
|  */ | ||||
| 
 | ||||
| #define __KERNEL_SYSCALLS__ | ||||
| static int errno; | ||||
| 
 | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/kthread.h> | ||||
| #include <linux/sched.h> | ||||
| @ -200,7 +197,7 @@ static void do_envctrl_shutdown(struct bbc_cpu_temperature *tp) | ||||
| 	printk(KERN_CRIT "kenvctrld: Shutting down the system now.\n"); | ||||
| 
 | ||||
| 	shutting_down = 1; | ||||
| 	if (execve("/sbin/shutdown", argv, envp) < 0) | ||||
| 	if (kernel_execve("/sbin/shutdown", argv, envp) < 0) | ||||
| 		printk(KERN_CRIT "envctrl: shutdown execution failed\n"); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -19,9 +19,6 @@ | ||||
|  *              Daniele Bellucci <bellucda@tiscali.it> | ||||
|  */ | ||||
| 
 | ||||
| #define __KERNEL_SYSCALLS__ | ||||
| static int errno; | ||||
| 
 | ||||
| #include <linux/module.h> | ||||
| #include <linux/sched.h> | ||||
| #include <linux/kthread.h> | ||||
| @ -976,13 +973,15 @@ static void envctrl_do_shutdown(void) | ||||
| 		"HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; | ||||
| 	char *argv[] = {  | ||||
| 		"/sbin/shutdown", "-h", "now", NULL };	 | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (inprog != 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	inprog = 1; | ||||
| 	printk(KERN_CRIT "kenvctrld: WARNING: Shutting down the system now.\n"); | ||||
| 	if (0 > execve("/sbin/shutdown", argv, envp)) { | ||||
| 	ret = kernel_execve("/sbin/shutdown", argv, envp); | ||||
| 	if (ret < 0) { | ||||
| 		printk(KERN_CRIT "kenvctrld: WARNING: system shutdown failed!\n");  | ||||
| 		inprog = 0;  /* unlikely to succeed, but we could try again */ | ||||
| 	} | ||||
|  | ||||
| @ -580,75 +580,6 @@ type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\ | ||||
| #define __ARCH_WANT_SYS_OLDUMOUNT | ||||
| #define __ARCH_WANT_SYS_SIGPENDING | ||||
| 
 | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/signal.h> | ||||
| #include <linux/syscalls.h> | ||||
| #include <asm/ptrace.h> | ||||
| 
 | ||||
| static inline long open(const char * name, int mode, int flags) | ||||
| { | ||||
| 	return sys_open(name, mode, flags); | ||||
| } | ||||
| 
 | ||||
| static inline long dup(int fd) | ||||
| { | ||||
| 	return sys_dup(fd); | ||||
| } | ||||
| 
 | ||||
| static inline long close(int fd) | ||||
| { | ||||
| 	return sys_close(fd); | ||||
| } | ||||
| 
 | ||||
| static inline off_t lseek(int fd, off_t off, int whence) | ||||
| { | ||||
| 	return sys_lseek(fd, off, whence); | ||||
| } | ||||
| 
 | ||||
| static inline void _exit(int value) | ||||
| { | ||||
| 	sys_exit(value); | ||||
| } | ||||
| 
 | ||||
| #define exit(x) _exit(x) | ||||
| 
 | ||||
| static inline long write(int fd, const char * buf, size_t nr) | ||||
| { | ||||
| 	return sys_write(fd, buf, nr); | ||||
| } | ||||
| 
 | ||||
| static inline long read(int fd, char * buf, size_t nr) | ||||
| { | ||||
| 	return sys_read(fd, buf, nr); | ||||
| } | ||||
| 
 | ||||
| extern int execve(char *, char **, char **); | ||||
| 
 | ||||
| static inline long setsid(void) | ||||
| { | ||||
| 	return sys_setsid(); | ||||
| } | ||||
| 
 | ||||
| static inline pid_t waitpid(int pid, int * wait_stat, int flags) | ||||
| { | ||||
| 	return sys_wait4(pid, wait_stat, flags, NULL); | ||||
| } | ||||
| 
 | ||||
| asmlinkage int sys_execve(char *ufilename, char **argv, char **envp, | ||||
| 			unsigned long a3, unsigned long a4, unsigned long a5, | ||||
| 			struct pt_regs regs); | ||||
| asmlinkage long sys_rt_sigaction(int sig, | ||||
| 				const struct sigaction __user *act, | ||||
| 				struct sigaction __user *oact, | ||||
| 				size_t sigsetsize, | ||||
| 				void *restorer); | ||||
| 
 | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| /* "Conditional" syscalls.  What we want is
 | ||||
| 
 | ||||
| 	__attribute__((weak,alias("sys_ni_syscall"))) | ||||
|  | ||||
| @ -549,30 +549,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 | ||||
| #define __ARCH_WANT_SYS_SOCKETCALL | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/syscalls.h> | ||||
| 
 | ||||
| extern long execve(const char *file, char **argv, char **envp); | ||||
| 
 | ||||
| struct pt_regs; | ||||
| asmlinkage int sys_execve(char *filenamei, char **argv, char **envp, | ||||
| 			struct pt_regs *regs); | ||||
| asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, | ||||
| 			struct pt_regs *regs); | ||||
| asmlinkage int sys_fork(struct pt_regs *regs); | ||||
| asmlinkage int sys_vfork(struct pt_regs *regs); | ||||
| asmlinkage int sys_pipe(unsigned long *fildes); | ||||
| struct sigaction; | ||||
| asmlinkage long sys_rt_sigaction(int sig, | ||||
| 				const struct sigaction __user *act, | ||||
| 				struct sigaction __user *oact, | ||||
| 				size_t sigsetsize); | ||||
| 
 | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| /*
 | ||||
|  * "Conditional" syscalls | ||||
|  * | ||||
|  | ||||
| @ -464,30 +464,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 | ||||
| #define __ARCH_WANT_SYS_SIGPROCMASK | ||||
| #define __ARCH_WANT_SYS_RT_SIGACTION | ||||
| 
 | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/syscalls.h> | ||||
| 
 | ||||
| extern long execve(const char *file, char **argv, char **envp); | ||||
| 
 | ||||
| struct pt_regs; | ||||
| asmlinkage int sys_execve(char *filenamei, char **argv, char **envp, | ||||
| 			struct pt_regs *regs); | ||||
| asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, | ||||
| 			struct pt_regs *regs); | ||||
| asmlinkage int sys_fork(struct pt_regs *regs); | ||||
| asmlinkage int sys_vfork(struct pt_regs *regs); | ||||
| asmlinkage int sys_pipe(unsigned long *fildes); | ||||
| struct sigaction; | ||||
| asmlinkage long sys_rt_sigaction(int sig, | ||||
| 				const struct sigaction __user *act, | ||||
| 				struct sigaction __user *oact, | ||||
| 				size_t sigsetsize); | ||||
| 
 | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| /*
 | ||||
|  * "Conditional" syscalls | ||||
|  * | ||||
|  | ||||
| @ -319,78 +319,6 @@ | ||||
| 
 | ||||
| extern long __ia64_syscall (long a0, long a1, long a2, long a3, long a4, long nr); | ||||
| 
 | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/string.h> | ||||
| #include <linux/signal.h> | ||||
| #include <asm/ptrace.h> | ||||
| #include <linux/stringify.h> | ||||
| #include <linux/syscalls.h> | ||||
| 
 | ||||
| static inline long | ||||
| open (const char * name, int mode, int flags) | ||||
| { | ||||
| 	return sys_open(name, mode, flags); | ||||
| } | ||||
| 
 | ||||
| static inline long | ||||
| dup (int fd) | ||||
| { | ||||
| 	return sys_dup(fd); | ||||
| } | ||||
| 
 | ||||
| static inline long | ||||
| close (int fd) | ||||
| { | ||||
| 	return sys_close(fd); | ||||
| } | ||||
| 
 | ||||
| static inline off_t | ||||
| lseek (int fd, off_t off, int whence) | ||||
| { | ||||
| 	return sys_lseek(fd, off, whence); | ||||
| } | ||||
| 
 | ||||
| static inline void | ||||
| _exit (int value) | ||||
| { | ||||
| 	sys_exit(value); | ||||
| } | ||||
| 
 | ||||
| #define exit(x) _exit(x) | ||||
| 
 | ||||
| static inline long | ||||
| write (int fd, const char * buf, size_t nr) | ||||
| { | ||||
| 	return sys_write(fd, buf, nr); | ||||
| } | ||||
| 
 | ||||
| static inline long | ||||
| read (int fd, char * buf, size_t nr) | ||||
| { | ||||
| 	return sys_read(fd, buf, nr); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static inline long | ||||
| setsid (void) | ||||
| { | ||||
| 	return sys_setsid(); | ||||
| } | ||||
| 
 | ||||
| static inline pid_t | ||||
| waitpid (int pid, int * wait_stat, int flags) | ||||
| { | ||||
| 	return sys_wait4(pid, wait_stat, flags, NULL); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| extern int execve (const char *filename, char *const av[], char *const ep[]); | ||||
| extern pid_t clone (unsigned long flags, void *sp); | ||||
| 
 | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| asmlinkage unsigned long sys_mmap( | ||||
| 				unsigned long addr, unsigned long len, | ||||
| 				int prot, int flags, | ||||
|  | ||||
| @ -952,92 +952,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)	\ | ||||
| #define __ARCH_WANT_SYS_SIGPROCMASK | ||||
| #define __ARCH_WANT_SYS_RT_SIGACTION | ||||
| 
 | ||||
| /* mmap & mmap2 take 6 arguments */ | ||||
| #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||||
| type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \ | ||||
| {									        \ | ||||
|     return K_INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6);	\ | ||||
| } | ||||
| 
 | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #include <asm/current.h> | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/types.h> | ||||
| #include <linux/syscalls.h> | ||||
| 
 | ||||
| static inline pid_t setsid(void) | ||||
| { | ||||
| 	return sys_setsid(); | ||||
| } | ||||
| 
 | ||||
| static inline int write(int fd, const char *buf, off_t count) | ||||
| { | ||||
| 	return sys_write(fd, buf, count); | ||||
| } | ||||
| 
 | ||||
| static inline int read(int fd, char *buf, off_t count) | ||||
| { | ||||
| 	return sys_read(fd, buf, count); | ||||
| } | ||||
| 
 | ||||
| static inline off_t lseek(int fd, off_t offset, int count) | ||||
| { | ||||
| 	return sys_lseek(fd, offset, count); | ||||
| } | ||||
| 
 | ||||
| static inline int dup(int fd) | ||||
| { | ||||
| 	return sys_dup(fd); | ||||
| } | ||||
| 
 | ||||
| static inline int execve(char *filename, char * argv [], | ||||
| 	char * envp[]) | ||||
| { | ||||
| 	extern int __execve(char *, char **, char **, struct task_struct *); | ||||
| 	return __execve(filename, argv, envp, current); | ||||
| } | ||||
| 
 | ||||
| static inline int open(const char *file, int flag, int mode) | ||||
| { | ||||
| 	return sys_open(file, flag, mode); | ||||
| } | ||||
| 
 | ||||
| static inline int close(int fd) | ||||
| { | ||||
| 	return sys_close(fd); | ||||
| } | ||||
| 
 | ||||
| static inline void _exit(int exitcode) | ||||
| { | ||||
| 	sys_exit(exitcode); | ||||
| } | ||||
| 
 | ||||
| static inline pid_t waitpid(pid_t pid, int *wait_stat, int options) | ||||
| { | ||||
| 	return sys_wait4(pid, wait_stat, options, NULL); | ||||
| } | ||||
| 
 | ||||
| asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len, | ||||
| 				unsigned long prot, unsigned long flags, | ||||
| 				unsigned long fd, unsigned long offset); | ||||
| asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len, | ||||
| 				unsigned long prot, unsigned long flags, | ||||
| 				unsigned long fd, unsigned long pgoff); | ||||
| struct pt_regs; | ||||
| asmlinkage int sys_execve(struct pt_regs *regs); | ||||
| int sys_clone(unsigned long clone_flags, unsigned long usp, | ||||
| 		struct pt_regs *regs); | ||||
| int sys_vfork(struct pt_regs *regs); | ||||
| int sys_pipe(int *fildes); | ||||
| struct sigaction; | ||||
| asmlinkage long sys_rt_sigaction(int sig, | ||||
| 				const struct sigaction __user *act, | ||||
| 				struct sigaction __user *oact, | ||||
| 				size_t sigsetsize); | ||||
| 
 | ||||
| #endif	/* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| #endif /* __ASSEMBLY__ */ | ||||
| 
 | ||||
| #undef STR | ||||
|  | ||||
| @ -478,13 +478,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 | ||||
| #define __ARCH_WANT_SYS_NEWFSTATAT | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * System call prototypes. | ||||
|  */ | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| extern int execve(const char *file, char **argv, char **envp); | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| /*
 | ||||
|  * "Conditional" syscalls | ||||
|  * | ||||
|  | ||||
| @ -37,34 +37,6 @@ extern int um_execve(const char *file, char *const argv[], char *const env[]); | ||||
| #define __ARCH_WANT_SYS_RT_SIGSUSPEND | ||||
| #endif | ||||
| 
 | ||||
| #ifdef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/types.h> | ||||
| 
 | ||||
| static inline int execve(const char *filename, char *const argv[], | ||||
| 			 char *const envp[]) | ||||
| { | ||||
| 	mm_segment_t fs; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	fs = get_fs(); | ||||
| 	set_fs(KERNEL_DS); | ||||
| 	ret = um_execve(filename, argv, envp); | ||||
| 	set_fs(fs); | ||||
| 
 | ||||
| 	if (ret >= 0) | ||||
| 		return ret; | ||||
| 
 | ||||
| 	errno = -(long)ret; | ||||
| 	return -1; | ||||
| } | ||||
| 
 | ||||
| int sys_execve(char *file, char **argv, char **env); | ||||
| 
 | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| #undef __KERNEL_SYSCALLS__ | ||||
| #include "asm/arch/unistd.h" | ||||
| 
 | ||||
| #endif /* _UM_UNISTD_H_*/ | ||||
|  | ||||
| @ -620,10 +620,11 @@ __SYSCALL(__NR_vmsplice, sys_vmsplice) | ||||
| #define __NR_move_pages		279 | ||||
| __SYSCALL(__NR_move_pages, sys_move_pages) | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| 
 | ||||
| #define __NR_syscall_max __NR_move_pages | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| #include <linux/err.h> | ||||
| #endif | ||||
| 
 | ||||
| #ifndef __NO_STUBS | ||||
| 
 | ||||
| @ -663,8 +664,6 @@ do { \ | ||||
| #define __ARCH_WANT_SYS_TIME | ||||
| #define __ARCH_WANT_COMPAT_SYS_TIME | ||||
| 
 | ||||
| #ifndef __KERNEL_SYSCALLS__ | ||||
| 
 | ||||
| #define __syscall "syscall" | ||||
| 
 | ||||
| #define _syscall0(type,name) \ | ||||
| @ -746,83 +745,7 @@ __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; movq %7,%%r9 ; " __syscall \ | ||||
| __syscall_return(type,__res); \ | ||||
| } | ||||
| 
 | ||||
| #else /* __KERNEL_SYSCALLS__ */ | ||||
| 
 | ||||
| #include <linux/syscalls.h> | ||||
| #include <asm/ptrace.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * we need this inline - forking from kernel space will result | ||||
|  * in NO COPY ON WRITE (!!!), until an execve is executed. This | ||||
|  * is no problem, but for the stack. This is handled by not letting | ||||
|  * main() use the stack at all after fork(). Thus, no function | ||||
|  * calls - which means inline code for fork too, as otherwise we | ||||
|  * would use the stack upon exit from 'fork()'. | ||||
|  * | ||||
|  * Actually only pause and fork are needed inline, so that there | ||||
|  * won't be any messing with the stack from main(), but we define | ||||
|  * some others too. | ||||
|  */ | ||||
| #define __NR__exit __NR_exit | ||||
| 
 | ||||
| static inline pid_t setsid(void) | ||||
| { | ||||
| 	return sys_setsid(); | ||||
| } | ||||
| 
 | ||||
| static inline ssize_t write(unsigned int fd, char * buf, size_t count) | ||||
| { | ||||
| 	return sys_write(fd, buf, count); | ||||
| } | ||||
| 
 | ||||
| static inline ssize_t read(unsigned int fd, char * buf, size_t count) | ||||
| { | ||||
| 	return sys_read(fd, buf, count); | ||||
| } | ||||
| 
 | ||||
| static inline off_t lseek(unsigned int fd, off_t offset, unsigned int origin) | ||||
| { | ||||
| 	return sys_lseek(fd, offset, origin); | ||||
| } | ||||
| 
 | ||||
| static inline long dup(unsigned int fd) | ||||
| { | ||||
| 	return sys_dup(fd); | ||||
| } | ||||
| 
 | ||||
| /* implemented in asm in arch/x86_64/kernel/entry.S */ | ||||
| extern int execve(const char *, char * const *, char * const *); | ||||
| 
 | ||||
| static inline long open(const char * filename, int flags, int mode) | ||||
| { | ||||
| 	return sys_open(filename, flags, mode); | ||||
| } | ||||
| 
 | ||||
| static inline long close(unsigned int fd) | ||||
| { | ||||
| 	return sys_close(fd); | ||||
| } | ||||
| 
 | ||||
| static inline pid_t waitpid(int pid, int * wait_stat, int flags) | ||||
| { | ||||
| 	return sys_wait4(pid, wait_stat, flags, NULL); | ||||
| } | ||||
| 
 | ||||
| extern long sys_mmap(unsigned long addr, unsigned long len, | ||||
| 			unsigned long prot, unsigned long flags, | ||||
| 			unsigned long fd, unsigned long off); | ||||
| 
 | ||||
| extern int sys_modify_ldt(int func, void *ptr, unsigned long bytecount); | ||||
| 
 | ||||
| asmlinkage long sys_execve(char *name, char **argv, char **envp, | ||||
| 			struct pt_regs regs); | ||||
| asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, | ||||
| 			void *parent_tid, void *child_tid, | ||||
| 			struct pt_regs regs); | ||||
| asmlinkage long sys_fork(struct pt_regs regs); | ||||
| asmlinkage long sys_vfork(struct pt_regs regs); | ||||
| asmlinkage long sys_pipe(int *fildes); | ||||
| 
 | ||||
| #ifdef __KERNEL__ | ||||
| #ifndef __ASSEMBLY__ | ||||
| 
 | ||||
| #include <linux/linkage.h> | ||||
| @ -839,8 +762,8 @@ asmlinkage long sys_rt_sigaction(int sig, | ||||
| 				size_t sigsetsize); | ||||
| 
 | ||||
| #endif  /* __ASSEMBLY__ */ | ||||
| 
 | ||||
| #endif /* __KERNEL_SYSCALLS__ */ | ||||
| #endif	/* __KERNEL__ */ | ||||
| #endif	/* __NO_STUBS */ | ||||
| 
 | ||||
| /*
 | ||||
|  * "Conditional" syscalls | ||||
| @ -850,8 +773,4 @@ asmlinkage long sys_rt_sigaction(int sig, | ||||
|  */ | ||||
| #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") | ||||
| 
 | ||||
| #endif /* __NO_STUBS */ | ||||
| 
 | ||||
| #endif /* __KERNEL__ */ | ||||
| 
 | ||||
| #endif /* _ASM_X86_64_UNISTD_H_ */ | ||||
|  | ||||
| @ -599,4 +599,6 @@ asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, | ||||
| 				    size_t len); | ||||
| asmlinkage long sys_getcpu(unsigned __user *cpu, unsigned __user *node, struct getcpu_cache __user *cache); | ||||
| 
 | ||||
| int kernel_execve(const char *filename, char *const argv[], char *const envp[]); | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user