[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:
committed by
Linus Torvalds
parent
6760856791
commit
3db03b4afb
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user