Commit 9d3f401c authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

Merge SA_IMMUTABLE-fixes-for-v5.16-rc2

I completed the first batch of signal changes for v5.17 against
v5.16-rc1 before the SA_IMMUTABLE fixes where completed.  Which leaves
me with two lines of development that I want on my signal development
branch both rooted at v5.16-rc1.  Especially as I am hoping
to reach the point of being able to remove SA_IMMUTABLE.

Linus merged my SA_IMUTABLE fixes as:
7af959b5 ("Merge branch 'SA_IMMUTABLE-fixes-for-v5.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace")

To avoid rebasing the development changes that are currently complete I am
merging the work I sent upstream to Linus to make my life simpler.

The SA_IMMUTABLE changes as they are described in Linus's merge commit.

Pull exit-vs-signal handling fixes from Eric Biederman:
 "This is a small set of changes where debuggers were no longer able to
  intercept synchronous SIGTRAP and SIGSEGV, introduced by the exit
  cleanups.

  This is essentially the change you suggested with all of i's dotted
  and the t's crossed so that ptrace can intercept all of the cases it
  has been able to intercept the past, and all of the cases that made it
  to exit without giving ptrace a chance still don't give ptrace a
  chance"

* 'SA_IMMUTABLE-fixes-for-v5.16-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace

:
  signal: Replace force_fatal_sig with force_exit_sig when in doubt
  signal: Don't always set SA_IMMUTABLE for forced signals

Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
parents 5ae9497d fcb116bc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1145,7 +1145,7 @@ asmlinkage void set_esp0(unsigned long ssp)
 */
asmlinkage void fpsp040_die(void)
{
	force_fatal_sig(SIGSEGV);
	force_exit_sig(SIGSEGV);
}

#ifdef CONFIG_M68KFPU_EMU
+1 −1
Original line number Diff line number Diff line
@@ -1063,7 +1063,7 @@ SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
	 * We kill the task with a SIGSEGV in this situation.
	 */
	if (do_setcontext(new_ctx, regs, 0)) {
		force_fatal_sig(SIGSEGV);
		force_exit_sig(SIGSEGV);
		return -EFAULT;
	}

+2 −2
Original line number Diff line number Diff line
@@ -704,7 +704,7 @@ SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
	 */

	if (__get_user_sigset(&set, &new_ctx->uc_sigmask)) {
		force_fatal_sig(SIGSEGV);
		force_exit_sig(SIGSEGV);
		return -EFAULT;
	}
	set_current_blocked(&set);
@@ -713,7 +713,7 @@ SYSCALL_DEFINE3(swapcontext, struct ucontext __user *, old_ctx,
		return -EFAULT;
	if (__unsafe_restore_sigcontext(current, NULL, 0, &new_ctx->uc_mcontext)) {
		user_read_access_end();
		force_fatal_sig(SIGSEGV);
		force_exit_sig(SIGSEGV);
		return -EFAULT;
	}
	user_read_access_end();
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ static void default_trap_handler(struct pt_regs *regs)
{
	if (user_mode(regs)) {
		report_user_fault(regs, SIGSEGV, 0);
		force_fatal_sig(SIGSEGV);
		force_exit_sig(SIGSEGV);
	} else
		die(regs, "Unknown program exception");
}
+2 −2
Original line number Diff line number Diff line
@@ -244,7 +244,7 @@ static int setup_frame(struct ksignal *ksig, struct pt_regs *regs,
		get_sigframe(ksig, regs, sigframe_size);

	if (invalid_frame_pointer(sf, sigframe_size)) {
		force_fatal_sig(SIGILL);
		force_exit_sig(SIGILL);
		return -EINVAL;
	}

@@ -336,7 +336,7 @@ static int setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs,
	sf = (struct rt_signal_frame __user *)
		get_sigframe(ksig, regs, sigframe_size);
	if (invalid_frame_pointer(sf, sigframe_size)) {
		force_fatal_sig(SIGILL);
		force_exit_sig(SIGILL);
		return -EINVAL;
	}

Loading