From: ebiederm@xmission.com (Eric W. Biederman)
To: <linux-kernel@vger.kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH 1/4] tty_io: Use group_send_sig_info in __do_SACK to note it is a session being killed
Date: Sun, 16 Sep 2018 20:04:41 +0200 [thread overview]
Message-ID: <87fty9pbd2.fsf_-_@xmission.com> (raw)
In-Reply-To: <87lg81pbe2.fsf@xmission.com> (Eric W. Biederman's message of "Sun, 16 Sep 2018 20:04:05 +0200")
Replace send_sig and force_sig in __do_SAK with group_send_sig_info
the general helper for sending a signal to a process group. This is
wordier but it allows specifying PIDTYPE_SID so that the signal code
knows the signal went to a session.
Both force_sig() and send_sig(..., 1) specify SEND_SIG_PRIV and the
new call of group_send_sig_info does that explicitly. This is enough
to ensure even a pid namespace init is killed.
The global init remains unkillable. The guarantee that __do_SAK tries
to provide is a clean path to login to a machine. As the global init is
unkillable, if it chooses to hold open a tty it can violate this
guarantee. A technique other than killing processes would be needed
to provide this guarantee to userspace.
The only difference between force_sig and send_sig when sending
SIGKILL is that SIGNAL_UNKILLABLE is cleared. This has no affect on
the processing of a signal sent with SEND_SIG_PRIV by any process, making
it unnecessary, and not behavior that needs to be preserved.
force_sig was used originally because it did not take as many locks as
send_sig. Today send_sig, force_sig and group_send_sig_info take the
same locks when delivering a signal.
group_send_sig_info also contains a permission check that force_sig
and send_sig do not. However the presence of SEND_SIG_PRIV makes the
permission check a noop. So the permission check does not result
in any behavioral differences.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
---
drivers/tty/tty_io.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 32bc3e3fe4d3..6553247a761f 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -2738,7 +2738,7 @@ void __do_SAK(struct tty_struct *tty)
do_each_pid_task(session, PIDTYPE_SID, p) {
tty_notice(tty, "SAK: killed process %d (%s): by session\n",
task_pid_nr(p), p->comm);
- send_sig(SIGKILL, p, 1);
+ group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
} while_each_pid_task(session, PIDTYPE_SID, p);
/* Now kill any processes that happen to have the tty open */
@@ -2746,7 +2746,7 @@ void __do_SAK(struct tty_struct *tty)
if (p->signal->tty == tty) {
tty_notice(tty, "SAK: killed process %d (%s): by controlling tty\n",
task_pid_nr(p), p->comm);
- send_sig(SIGKILL, p, 1);
+ group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
continue;
}
task_lock(p);
@@ -2754,7 +2754,7 @@ void __do_SAK(struct tty_struct *tty)
if (i != 0) {
tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n",
task_pid_nr(p), p->comm, i - 1);
- force_sig(SIGKILL, p);
+ group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID);
}
task_unlock(p);
} while_each_thread(g, p);
--
2.17.1
next prev parent reply other threads:[~2018-09-16 18:04 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-03 20:41 [PATCH 00/10] Removing SEND_SIG_FORCED Eric W. Biederman
2018-09-03 20:44 ` [PATCH 01/10] signal: Always ignore SIGKILL and SIGSTOP sent to the global init Eric W. Biederman
2018-09-03 20:44 ` [PATCH 02/10] signal: Properly deliver SIGILL from uprobes Eric W. Biederman
2018-09-03 20:44 ` [PATCH 03/10] signal: Properly deliver SIGSEGV from x86 uprobes Eric W. Biederman
2018-09-03 20:44 ` [PATCH 04/10] signal: Always deliver the kernel's SIGKILL and SIGSTOP to a pid namespace init Eric W. Biederman
2018-09-03 20:44 ` [PATCH 05/10] signal: send_sig_all no longer needs SEND_SIG_FORCED Eric W. Biederman
2018-09-03 20:44 ` [PATCH 06/10] signal: Remove the siginfo paramater from kernel_dqueue_signal Eric W. Biederman
2018-09-03 20:44 ` [PATCH 07/10] signal: Don't send siginfo to kthreads Eric W. Biederman
2018-09-03 20:44 ` [PATCH 08/10] signal: Never allocate siginfo for SIGKILL or SIGSTOP Eric W. Biederman
2018-09-03 20:44 ` [PATCH 09/10] signal: Use SEND_SIG_PRIV not SEND_SIG_FORCED with SIGKILL and SIGSTOP Eric W. Biederman
2018-09-03 20:44 ` [PATCH 10/10] signal: Remove SEND_SIG_FORCED Eric W. Biederman
2018-09-08 11:03 ` [PATCH 00/10] Removing SEND_SIG_FORCED Thomas Gleixner
2018-09-16 18:04 ` [PATCH 0/4] signal: Cleanups Eric W. Biederman
2018-09-16 18:04 ` Eric W. Biederman [this message]
2018-09-16 18:05 ` [PATCH 2/4] signal: Use group_send_sig_info to kill all processes in a pid namespace Eric W. Biederman
2018-09-16 18:06 ` [PATCH 3/4] signal: Remove specific_send_sig_info Eric W. Biederman
2018-09-16 18:06 ` [PATCH 4/4] signal: Pair exports with their functions Eric W. Biederman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87fty9pbd2.fsf_-_@xmission.com \
--to=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome