Commit 53055065 authored by Al Viro's avatar Al Viro

tile: switch to generic sys_execve()

Acked-by: default avatarChris Metcalf <cmetcalf@tilera.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 0f8b9838
...@@ -148,6 +148,7 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm, ...@@ -148,6 +148,7 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
#define compat_start_thread(regs, ip, usp) do { \ #define compat_start_thread(regs, ip, usp) do { \
regs->pc = ptr_to_compat_reg((void *)(ip)); \ regs->pc = ptr_to_compat_reg((void *)(ip)); \
regs->sp = ptr_to_compat_reg((void *)(usp)); \ regs->sp = ptr_to_compat_reg((void *)(usp)); \
single_step_execve(); \
} while (0) } while (0)
/* /*
......
...@@ -211,6 +211,7 @@ static inline void start_thread(struct pt_regs *regs, ...@@ -211,6 +211,7 @@ static inline void start_thread(struct pt_regs *regs,
{ {
regs->pc = pc; regs->pc = pc;
regs->sp = usp; regs->sp = usp;
single_step_execve();
} }
/* Free all resources held by a thread. */ /* Free all resources held by a thread. */
......
...@@ -68,9 +68,10 @@ long _sys_sigaltstack(const stack_t __user *, stack_t __user *); ...@@ -68,9 +68,10 @@ long _sys_sigaltstack(const stack_t __user *, stack_t __user *);
long _sys_rt_sigreturn(void); long _sys_rt_sigreturn(void);
long _sys_clone(unsigned long clone_flags, unsigned long newsp, long _sys_clone(unsigned long clone_flags, unsigned long newsp,
void __user *parent_tid, void __user *child_tid); void __user *parent_tid, void __user *child_tid);
long _sys_execve(const char __user *filename, long sys_execve(const char __user *filename,
const char __user *const __user *argv, const char __user *const __user *argv,
const char __user *const __user *envp); const char __user *const __user *envp);
#define sys_execve sys_execve
#include <asm-generic/syscalls.h> #include <asm-generic/syscalls.h>
......
...@@ -16,4 +16,5 @@ ...@@ -16,4 +16,5 @@
#define __ARCH_WANT_SYS_LLSEEK #define __ARCH_WANT_SYS_LLSEEK
#endif #endif
#define __ARCH_WANT_SYS_NEWFSTATAT #define __ARCH_WANT_SYS_NEWFSTATAT
#define __ARCH_WANT_SYS_EXECVE
#include <uapi/asm/unistd.h> #include <uapi/asm/unistd.h>
...@@ -1476,7 +1476,6 @@ STD_ENTRY_LOCAL(bad_intr) ...@@ -1476,7 +1476,6 @@ STD_ENTRY_LOCAL(bad_intr)
}; \ }; \
STD_ENDPROC(_##x) STD_ENDPROC(_##x)
PTREGS_SYSCALL(sys_execve, r3)
PTREGS_SYSCALL(sys_sigaltstack, r2) PTREGS_SYSCALL(sys_sigaltstack, r2)
PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0) PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0)
PTREGS_SYSCALL(sys_cmpxchg_badaddr, r1) PTREGS_SYSCALL(sys_cmpxchg_badaddr, r1)
......
...@@ -1205,7 +1205,6 @@ STD_ENTRY_LOCAL(bad_intr) ...@@ -1205,7 +1205,6 @@ STD_ENTRY_LOCAL(bad_intr)
}; \ }; \
STD_ENDPROC(_##x) STD_ENDPROC(_##x)
PTREGS_SYSCALL(sys_execve, r3)
PTREGS_SYSCALL(sys_sigaltstack, r2) PTREGS_SYSCALL(sys_sigaltstack, r2)
PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0) PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0)
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
......
...@@ -594,51 +594,6 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, ...@@ -594,51 +594,6 @@ SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
parent_tidptr, child_tidptr); parent_tidptr, child_tidptr);
} }
/*
* sys_execve() executes a new program.
*/
SYSCALL_DEFINE4(execve, const char __user *, path,
const char __user *const __user *, argv,
const char __user *const __user *, envp,
struct pt_regs *, regs)
{
long error;
struct filename *filename;
filename = getname(path);
error = PTR_ERR(filename);
if (IS_ERR(filename))
goto out;
error = do_execve(filename->name, argv, envp, regs);
putname(filename);
if (error == 0)
single_step_execve();
out:
return error;
}
#ifdef CONFIG_COMPAT
long compat_sys_execve(const char __user *path,
compat_uptr_t __user *argv,
compat_uptr_t __user *envp)
{
long error;
struct filename *filename;
filename = getname(path);
error = PTR_ERR(filename);
if (IS_ERR(filename))
goto out;
error = compat_do_execve(filename->name, argv, envp,
current_pt_regs());
putname(filename);
if (error == 0)
single_step_execve();
out:
return error;
}
#endif
unsigned long get_wchan(struct task_struct *p) unsigned long get_wchan(struct task_struct *p)
{ {
struct KBacktraceIterator kbt; struct KBacktraceIterator kbt;
......
...@@ -107,7 +107,6 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len, ...@@ -107,7 +107,6 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
#endif #endif
/* Call the trampolines to manage pt_regs where necessary. */ /* Call the trampolines to manage pt_regs where necessary. */
#define sys_execve _sys_execve
#define sys_sigaltstack _sys_sigaltstack #define sys_sigaltstack _sys_sigaltstack
#define sys_rt_sigreturn _sys_rt_sigreturn #define sys_rt_sigreturn _sys_rt_sigreturn
#define sys_clone _sys_clone #define sys_clone _sys_clone
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment