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

Commit 38a7be3c authored by Richard Weinberger's avatar Richard Weinberger Committed by Richard Weinberger
Browse files

arm64: Use sigsp()



Use sigsp() instead of the open coded variant.

Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent 5290dd79
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -209,19 +209,13 @@ static int setup_sigframe(struct rt_sigframe __user *sf,
	return err;
}

static struct rt_sigframe __user *get_sigframe(struct k_sigaction *ka,
static struct rt_sigframe __user *get_sigframe(struct ksignal *ksig,
					       struct pt_regs *regs)
{
	unsigned long sp, sp_top;
	struct rt_sigframe __user *frame;

	sp = sp_top = regs->sp;

	/*
	 * This is the X/Open sanctioned signal stack switching.
	 */
	if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp))
		sp = sp_top = current->sas_ss_sp + current->sas_ss_size;
	sp = sp_top = sigsp(regs->sp, ksig);

	sp = (sp - sizeof(struct rt_sigframe)) & ~15;
	frame = (struct rt_sigframe __user *)sp;
@@ -259,7 +253,7 @@ static int setup_rt_frame(int usig, struct ksignal *ksig, sigset_t *set,
	struct rt_sigframe __user *frame;
	int err = 0;

	frame = get_sigframe(&ksig->ka, regs);
	frame = get_sigframe(ksig, regs);
	if (!frame)
		return 1;

+4 −10
Original line number Diff line number Diff line
@@ -407,19 +407,13 @@ asmlinkage int compat_sys_rt_sigreturn(struct pt_regs *regs)
	return 0;
}

static void __user *compat_get_sigframe(struct k_sigaction *ka,
static void __user *compat_get_sigframe(struct ksignal *ksig,
					struct pt_regs *regs,
					int framesize)
{
	compat_ulong_t sp = regs->compat_sp;
	compat_ulong_t sp = sigsp(regs->compat_sp, ksig);
	void __user *frame;

	/*
	 * This is the X/Open sanctioned signal stack switching.
	 */
	if ((ka->sa.sa_flags & SA_ONSTACK) && !sas_ss_flags(sp))
		sp = current->sas_ss_sp + current->sas_ss_size;

	/*
	 * ATPCS B01 mandates 8-byte alignment
	 */
@@ -526,7 +520,7 @@ int compat_setup_rt_frame(int usig, struct ksignal *ksig,
	struct compat_rt_sigframe __user *frame;
	int err = 0;

	frame = compat_get_sigframe(&ksig->ka, regs, sizeof(*frame));
	frame = compat_get_sigframe(ksig, regs, sizeof(*frame));

	if (!frame)
		return 1;
@@ -555,7 +549,7 @@ int compat_setup_frame(int usig, struct ksignal *ksig, sigset_t *set,
	struct compat_sigframe __user *frame;
	int err = 0;

	frame = compat_get_sigframe(&ksig->ka, regs, sizeof(*frame));
	frame = compat_get_sigframe(ksig, regs, sizeof(*frame));

	if (!frame)
		return 1;