Skip to content

Commit 44f4b56

Browse files
author
Al Viro
committed
alpha: introduce ret_from_kernel_execve(), switch to generic kernel_execve()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent cba1ec7 commit 44f4b56

File tree

3 files changed

+14
-19
lines changed

3 files changed

+14
-19
lines changed

arch/alpha/include/asm/unistd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@
482482
#define __ARCH_WANT_SYS_SIGPENDING
483483
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
484484
#define __ARCH_WANT_SYS_EXECVE
485+
#define __ARCH_WANT_KERNEL_EXECVE
485486

486487
/* "Conditional" syscalls. What we want is
487488

arch/alpha/kernel/entry.S

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,19 @@ ret_from_kernel_thread:
626626
jmp $31, sys_exit
627627
.end ret_from_kernel_thread
628628

629+
.globl ret_from_kernel_execve
630+
.align 4
631+
.ent ret_from_kernel_execve
632+
ret_from_kernel_execve:
633+
mov $16, $sp
634+
/* Avoid the HAE being gratuitously wrong, to avoid restoring it. */
635+
ldq $2, alpha_mv+HAE_CACHE
636+
stq $2, 152($sp) /* HAE */
637+
mov $31, $19 /* to disable syscall restarts */
638+
br $31, ret_to_user
639+
640+
.end ret_from_kernel_execve
641+
629642

630643
/*
631644
* Special system calls. Most of these are special in that they either

arch/alpha/kernel/process.c

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -435,22 +435,3 @@ get_wchan(struct task_struct *p)
435435
}
436436
return pc;
437437
}
438-
439-
int kernel_execve(const char *path, const char *const argv[], const char *const envp[])
440-
{
441-
/* Avoid the HAE being gratuitously wrong, which would cause us
442-
to do the whole turn off interrupts thing and restore it. */
443-
struct pt_regs regs = {.hae = alpha_mv.hae_cache};
444-
int err = do_execve(path, argv, envp, &regs);
445-
if (!err) {
446-
struct pt_regs *p = current_pt_regs();
447-
/* copy regs to normal position and off to userland we go... */
448-
*p = regs;
449-
__asm__ __volatile__ (
450-
"mov %0, $sp;"
451-
"br $31, ret_from_sys_call"
452-
: : "r"(p));
453-
}
454-
return err;
455-
}
456-
EXPORT_SYMBOL(kernel_execve);

0 commit comments

Comments
 (0)