summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk@arm.linux.org.uk>2002-03-14 22:44:22 -0800
committerKai Germaschewski <kai@tp1.ruhr-uni-bochum.de>2002-03-14 22:44:22 -0800
commitf9deb9e6016750e012953680b5f044e9fb76ff5a (patch)
tree79bd9a762dba718278bb0ddc8babcca65ce5e27f
parentbe4808e00729ab6e8c0f7ab66d473693cf28e438 (diff)
[PATCH] 2.4 and 2.5: remove Alt-Sysrq-L
The following patch removes Alt-Sysrq-L and its associated hack to kill of PID1, the init process. This is a mis-feature. If PID1 is killed, the kernel immediately enters an infinite loop in the depths of do_exit() with interrupts disabled, completely locking the machine. Obviously you can only reach for the reset button or power switch after this, leaving you with dirty filesystems.
-rw-r--r--drivers/char/sysrq.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c
index e76db4ed8ea4..b0f05c72f902 100644
--- a/drivers/char/sysrq.c
+++ b/drivers/char/sysrq.c
@@ -284,24 +284,20 @@ static struct sysrq_key_op sysrq_showmem_op = {
/* signal sysrq helper function
* Sends a signal to all user processes */
-static void send_sig_all(int sig, int even_init)
+static void send_sig_all(int sig)
{
struct task_struct *p;
for_each_task(p) {
- if (p->mm) { /* Not swapper nor kernel thread */
- if (p->pid == 1 && even_init)
- /* Ugly hack to kill init */
- p->pid = 0x8000;
- if (p->pid != 1)
- force_sig(sig, p);
- }
+ if (p->mm && p->pid != 1)
+ /* Not swapper, init nor kernel thread */
+ force_sig(sig, p);
}
}
static void sysrq_handle_term(int key, struct pt_regs *pt_regs,
struct kbd_struct *kbd, struct tty_struct *tty) {
- send_sig_all(SIGTERM, 0);
+ send_sig_all(SIGTERM);
console_loglevel = 8;
}
static struct sysrq_key_op sysrq_term_op = {
@@ -312,7 +308,7 @@ static struct sysrq_key_op sysrq_term_op = {
static void sysrq_handle_kill(int key, struct pt_regs *pt_regs,
struct kbd_struct *kbd, struct tty_struct *tty) {
- send_sig_all(SIGKILL, 0);
+ send_sig_all(SIGKILL);
console_loglevel = 8;
}
static struct sysrq_key_op sysrq_kill_op = {
@@ -321,17 +317,6 @@ static struct sysrq_key_op sysrq_kill_op = {
action_msg: "Kill All Tasks",
};
-static void sysrq_handle_killall(int key, struct pt_regs *pt_regs,
- struct kbd_struct *kbd, struct tty_struct *tty) {
- send_sig_all(SIGKILL, 1);
- console_loglevel = 8;
-}
-static struct sysrq_key_op sysrq_killall_op = {
- handler: sysrq_handle_killall,
- help_msg: "killalL",
- action_msg: "Kill All Tasks (even init)",
-};
-
/* END SIGNAL SYSRQ HANDLERS BLOCK */
@@ -366,7 +351,7 @@ static struct sysrq_key_op *sysrq_key_table[SYSRQ_KEY_TABLE_LENGTH] = {
#else
/* k */ NULL,
#endif
-/* l */ &sysrq_killall_op,
+/* l */ NULL,
/* m */ &sysrq_showmem_op,
/* n */ NULL,
/* o */ NULL, /* This will often be registered