Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 207bdae4 authored by Al Viro's avatar Al Viro
Browse files

arm64: switch to generic sigaltstack



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 0aa0203f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ config ARM64
	select GENERIC_IOMAP
	select GENERIC_IRQ_PROBE
	select GENERIC_IRQ_SHOW
	select GENERIC_SIGALTSTACK
	select GENERIC_SMP_IDLE_THREAD
	select GENERIC_TIME_VSYSCALL
	select HARDIRQS_SW_RESEND
+0 −2
Original line number Diff line number Diff line
@@ -24,8 +24,6 @@
 * System call wrappers implemented in kernel/entry.S.
 */
asmlinkage long sys_rt_sigreturn_wrapper(void);
asmlinkage long sys_sigaltstack_wrapper(const stack_t __user *uss,
					stack_t __user *uoss);

#include <asm-generic/syscalls.h>

+1 −1
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ __SYSCALL(182, sys_chown16)
__SYSCALL(183, sys_getcwd)
__SYSCALL(184, sys_capget)
__SYSCALL(185, sys_capset)
__SYSCALL(186, compat_sys_sigaltstack_wrapper)
__SYSCALL(186, compat_sys_sigaltstack)
__SYSCALL(187, compat_sys_sendfile)
__SYSCALL(188, sys_ni_syscall)			/* 188 reserved */
__SYSCALL(189, sys_ni_syscall)			/* 189 reserved */
+0 −5
Original line number Diff line number Diff line
@@ -677,10 +677,5 @@ ENTRY(sys_rt_sigreturn_wrapper)
	b	sys_rt_sigreturn
ENDPROC(sys_rt_sigreturn_wrapper)

ENTRY(sys_sigaltstack_wrapper)
	ldr	x2, [sp, #S_SP]
	b	sys_sigaltstack
ENDPROC(sys_sigaltstack_wrapper)

ENTRY(handle_arch_irq)
	.quad	0
+2 −15
Original line number Diff line number Diff line
@@ -149,8 +149,7 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
	if (restore_sigframe(regs, frame))
		goto badframe;

	if (do_sigaltstack(&frame->uc.uc_stack,
			   NULL, regs->sp) == -EFAULT)
	if (restore_altstack(&frame->uc.uc_stack))
		goto badframe;

	return regs->regs[0];
@@ -164,12 +163,6 @@ badframe:
	return 0;
}

asmlinkage long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
				unsigned long sp)
{
	return do_sigaltstack(uss, uoss, sp);
}

static int setup_sigframe(struct rt_sigframe __user *sf,
			  struct pt_regs *regs, sigset_t *set)
{
@@ -250,7 +243,6 @@ static int setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
			  sigset_t *set, struct pt_regs *regs)
{
	struct rt_sigframe __user *frame;
	stack_t stack;
	int err = 0;

	frame = get_sigframe(ka, regs);
@@ -260,12 +252,7 @@ static int setup_rt_frame(int usig, struct k_sigaction *ka, siginfo_t *info,
	__put_user_error(0, &frame->uc.uc_flags, err);
	__put_user_error(NULL, &frame->uc.uc_link, err);

	memset(&stack, 0, sizeof(stack));
	stack.ss_sp = (void __user *)current->sas_ss_sp;
	stack.ss_flags = sas_ss_flags(regs->sp);
	stack.ss_size = current->sas_ss_size;
	err |= __copy_to_user(&frame->uc.uc_stack, &stack, sizeof(stack));

	err |= __save_altstack(&frame->uc.uc_stack, regs->sp);
	err |= setup_sigframe(frame, regs, set);
	if (err == 0) {
		setup_return(regs, ka, frame, usig);
Loading