diff options
| author | Russell King <rmk@arm.linux.org.uk> | 2002-03-14 22:44:22 -0800 |
|---|---|---|
| committer | Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de> | 2002-03-14 22:44:22 -0800 |
| commit | f9deb9e6016750e012953680b5f044e9fb76ff5a (patch) | |
| tree | 79bd9a762dba718278bb0ddc8babcca65ce5e27f | |
| parent | be4808e00729ab6e8c0f7ab66d473693cf28e438 (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.c | 29 |
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 |
