diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-14 01:43:20 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-22 22:31:12 -0400 |
commit | 80b249b71e2e7caf6110a0d50c9634cebb223c0e (patch) | |
tree | badabfe9419ddb0c58c5809592771ba4da172811 /arch/sh | |
parent | 7147e215480323bb2617fcebf585c447188ff760 (diff) |
sh: convert to generic sys_execve()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/include/asm/syscalls_32.h | 4 | ||||
-rw-r--r-- | arch/sh/include/asm/syscalls_64.h | 4 | ||||
-rw-r--r-- | arch/sh/include/asm/unistd.h | 1 | ||||
-rw-r--r-- | arch/sh/kernel/process_32.c | 23 | ||||
-rw-r--r-- | arch/sh/kernel/process_64.c | 25 |
5 files changed, 1 insertions, 56 deletions
diff --git a/arch/sh/include/asm/syscalls_32.h b/arch/sh/include/asm/syscalls_32.h index 6c1fa559753c..d2f89f1741f4 100644 --- a/arch/sh/include/asm/syscalls_32.h +++ b/arch/sh/include/asm/syscalls_32.h | |||
@@ -19,10 +19,6 @@ asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, | |||
19 | asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, | 19 | asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, |
20 | unsigned long r6, unsigned long r7, | 20 | unsigned long r6, unsigned long r7, |
21 | struct pt_regs __regs); | 21 | struct pt_regs __regs); |
22 | asmlinkage int sys_execve(const char __user *ufilename, | ||
23 | const char __user *const __user *uargv, | ||
24 | const char __user *const __user *uenvp, | ||
25 | unsigned long r7, struct pt_regs __regs); | ||
26 | asmlinkage int sys_sigsuspend(old_sigset_t mask); | 22 | asmlinkage int sys_sigsuspend(old_sigset_t mask); |
27 | asmlinkage int sys_sigaction(int sig, const struct old_sigaction __user *act, | 23 | asmlinkage int sys_sigaction(int sig, const struct old_sigaction __user *act, |
28 | struct old_sigaction __user *oact); | 24 | struct old_sigaction __user *oact); |
diff --git a/arch/sh/include/asm/syscalls_64.h b/arch/sh/include/asm/syscalls_64.h index ee519f41d950..3fedd9f1fab5 100644 --- a/arch/sh/include/asm/syscalls_64.h +++ b/arch/sh/include/asm/syscalls_64.h | |||
@@ -21,10 +21,6 @@ asmlinkage int sys_vfork(unsigned long r2, unsigned long r3, | |||
21 | unsigned long r4, unsigned long r5, | 21 | unsigned long r4, unsigned long r5, |
22 | unsigned long r6, unsigned long r7, | 22 | unsigned long r6, unsigned long r7, |
23 | struct pt_regs *pregs); | 23 | struct pt_regs *pregs); |
24 | asmlinkage int sys_execve(const char *ufilename, char **uargv, | ||
25 | char **uenvp, unsigned long r5, | ||
26 | unsigned long r6, unsigned long r7, | ||
27 | struct pt_regs *pregs); | ||
28 | 24 | ||
29 | /* Misc syscall related bits */ | 25 | /* Misc syscall related bits */ |
30 | asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs); | 26 | asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs); |
diff --git a/arch/sh/include/asm/unistd.h b/arch/sh/include/asm/unistd.h index 307201a854f3..41f59fa827a8 100644 --- a/arch/sh/include/asm/unistd.h +++ b/arch/sh/include/asm/unistd.h | |||
@@ -29,6 +29,7 @@ | |||
29 | # define __ARCH_WANT_SYS_SIGPENDING | 29 | # define __ARCH_WANT_SYS_SIGPENDING |
30 | # define __ARCH_WANT_SYS_SIGPROCMASK | 30 | # define __ARCH_WANT_SYS_SIGPROCMASK |
31 | # define __ARCH_WANT_SYS_RT_SIGACTION | 31 | # define __ARCH_WANT_SYS_RT_SIGACTION |
32 | # define __ARCH_WANT_SYS_EXECVE | ||
32 | 33 | ||
33 | /* | 34 | /* |
34 | * "Conditional" syscalls | 35 | * "Conditional" syscalls |
diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c index b55070b9a634..fce8029de922 100644 --- a/arch/sh/kernel/process_32.c +++ b/arch/sh/kernel/process_32.c | |||
@@ -262,29 +262,6 @@ asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, | |||
262 | 0, NULL, NULL); | 262 | 0, NULL, NULL); |
263 | } | 263 | } |
264 | 264 | ||
265 | /* | ||
266 | * sys_execve() executes a new program. | ||
267 | */ | ||
268 | asmlinkage int sys_execve(const char __user *ufilename, | ||
269 | const char __user *const __user *uargv, | ||
270 | const char __user *const __user *uenvp, | ||
271 | unsigned long r7, struct pt_regs __regs) | ||
272 | { | ||
273 | struct pt_regs *regs = RELOC_HIDE(&__regs, 0); | ||
274 | int error; | ||
275 | struct filename *filename; | ||
276 | |||
277 | filename = getname(ufilename); | ||
278 | error = PTR_ERR(filename); | ||
279 | if (IS_ERR(filename)) | ||
280 | goto out; | ||
281 | |||
282 | error = do_execve(filename->name, uargv, uenvp, regs); | ||
283 | putname(filename); | ||
284 | out: | ||
285 | return error; | ||
286 | } | ||
287 | |||
288 | unsigned long get_wchan(struct task_struct *p) | 265 | unsigned long get_wchan(struct task_struct *p) |
289 | { | 266 | { |
290 | unsigned long pc; | 267 | unsigned long pc; |
diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c index fd338b030fd9..3a0f3fd3bb58 100644 --- a/arch/sh/kernel/process_64.c +++ b/arch/sh/kernel/process_64.c | |||
@@ -454,31 +454,6 @@ asmlinkage int sys_vfork(unsigned long r2, unsigned long r3, | |||
454 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, pregs->regs[15], pregs, 0, 0, 0); | 454 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, pregs->regs[15], pregs, 0, 0, 0); |
455 | } | 455 | } |
456 | 456 | ||
457 | /* | ||
458 | * sys_execve() executes a new program. | ||
459 | */ | ||
460 | asmlinkage int sys_execve(const char *ufilename, char **uargv, | ||
461 | char **uenvp, unsigned long r5, | ||
462 | unsigned long r6, unsigned long r7, | ||
463 | struct pt_regs *pregs) | ||
464 | { | ||
465 | int error; | ||
466 | struct filename *filename; | ||
467 | |||
468 | filename = getname((char __user *)ufilename); | ||
469 | error = PTR_ERR(filename); | ||
470 | if (IS_ERR(filename)) | ||
471 | goto out; | ||
472 | |||
473 | error = do_execve(filename->name, | ||
474 | (const char __user *const __user *)uargv, | ||
475 | (const char __user *const __user *)uenvp, | ||
476 | pregs); | ||
477 | putname(filename); | ||
478 | out: | ||
479 | return error; | ||
480 | } | ||
481 | |||
482 | #ifdef CONFIG_FRAME_POINTER | 457 | #ifdef CONFIG_FRAME_POINTER |
483 | static int in_sh64_switch_to(unsigned long pc) | 458 | static int in_sh64_switch_to(unsigned long pc) |
484 | { | 459 | { |